2012-06-14 3 views
5

많은 스크린이있는 WPF 응용 프로그램에서 작업 할 때마다 모든 컨트롤에 많은 컨트롤이 있습니다. 어떤 컨트롤에 포커스가 있는지 판단하기가 쉽지 않습니다.포커스를 얻었을 때 WPF 컨트롤을 강조 표시합니다.

그래서 현재 포커스가있는 컨트롤을 강조하고 싶습니다. 텍스트 상자, 버튼, 콤보 박스, 목록 상자 또는 그리드 일 수 있습니다.

스타일과 트리거를 사용하여이 작업을 수행하는 것이 더 좋을 것입니다.

감사합니다.

답변

7

올바른 이벤트에 트리거를 사용해야합니다. 귀하의 경우에는 IsFocused입니다. 간단한 예 : (예를 들어, TargetType="{x:Type TextBox}"를 사용)를 특정 제어 유형이 스타일을 적용 할 경우

<Trigger Property="IsFocused" Value="true"> 
    <Setter Property="BorderBrush" Value="Red" /> 
    <Setter Property="BorderThickness" Value="1" /> 
</Trigger> 

당신은 Style 태그를 사용해야합니다.

당신이 트리거의 같은 종류의 단지 BasedOn 속성의 도움으로 사용자 정의 스타일을 상속보다 기본 스타일을 사용하는 것이 좋습니다보다 유형의 응용 프로그램에서 모든 컨트롤을 적용 할 경우 <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseFocusStyle}">

이렇게하는 방법에 대한 좋은 예는 "How to make Style.Triggers trigger a different named style to be applied"입니다.

0

모든 컨트롤에 대해 사용자 지정 스타일의 시각적 상태를 사용하는 것이 좋습니다. 모든 표준 컨트롤이이 시각적 상태를 지원합니다. 예를 들어 button의 MSDN 스타일을 확인하면 Focused에 대한 시각적 상태가 있음을 알 수 있습니다. This MSDN 문서도 도움이 될 수 있습니다.

0

이 동작을 위해 adorner을 시도해 볼 수도 있습니다.

http://uiannotations.codeplex.com/wikipage?title=Adorners&referringTitle=Documentation

- 경우에 당신이 다음 코드 플렉스에이 구현에서 봐 3'rd 파티 오픈 소스 라이브러리를 사용하는 열려있는, 당신은 또한 자신의 adorner을 구현하는 방법에 대한 아이디어를 얻을 수있는 코드를 통해 갈 수 있습니다

enter image description here

다른 솔루션에 대한 자세한 내용을 갖는 또 다른 비슷한 질문 - Reusable way to put a bright red box around whatever element currently has focus?

관련 문제