수색…
소개
Trigger
, DataTrigger
, MultiTrigger
, MultiDataTrigger
및 EventTrigger
포함하여 WPF에서 사용할 수있는 다양한 유형의 트리거에 대해 설명합니다.
트리거는 FrameworkElement
또는 FrameworkContentElement
에서 파생되는 모든 클래스가 트리거에 정의 된 특정 조건을 기반으로 속성을 설정하거나 변경하도록 허용합니다. 기본적으로 요소의 스타일을 지정할 수 있으면 트리거 할 수도 있습니다.
비고
-
EventTrigger
를 제외한 모든 트리거는<Style>
요소 내에 정의되어야합니다.EventTrigger
는<Style>
요소 또는 컨트롤의Triggers
속성에서 정의 할 수 있습니다. -
<Trigger>
요소는 임의의 수의<Setter>
요소를 포함 할 수 있습니다. 이 요소는<Trigger>
요소의 조건이 충족 될 때 포함 요소의 속성을 설정합니다. - 루트 요소 마크 업에서 속성이 정의 된 경우 트리거 조건이 충족 되더라도
<Setter>
요소에 정의 된 속성 변경은 적용되지 않습니다.<TextBlock Text="Sample">
마크 업을 고려하십시오. 루트 프로퍼티 정의가 스타일에 정의 된 프로퍼티에 대한 선행을 취하기 때문에 프로 시저의Text
프로퍼티는 트리거에 따라 절대로 바뀌지 않습니다. - 바인딩과 마찬가지로 일단 트리거가 사용되면 수정할 수 없습니다.
방아쇠
Trigger
는 다섯 가지 트리거 유형 중 가장 단순한 것으로 동일한 컨트롤 내의 다른 속성을 기반으로 속성을 설정합니다.
<TextBlock>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="Pass">
<Setter Property="Foreground" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
이 예제에서는 Text
속성이 문자열 "Pass"
같을 때 TextBlock
의 전경색이 녹색으로 바뀝니다.
MultiTrigger
MultiTrigger
는 동일한 컨트롤 내의 속성에만 적용된다는 점에서 표준 Trigger
와 유사합니다. 차이점은 MultiTrigger
에는 트리거가 작동하기 전에 충족되어야하는 여러 조건이 있다는 것입니다. 조건은 <Condition>
태그를 사용하여 정의됩니다.
<TextBlock x:Name="_txtBlock" IsEnabled="False">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value="Pass"/>
<Condition Property="IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Foreground" Value="Green"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
두 조건이 모두 충족 될 때까지 MultiTrigger
가 활성화되지 않습니다.
DataTrigger
DataTrigger
는 자체 컨트롤, 다른 컨트롤 또는 심지어 비 UI 클래스의 속성 인 모든 속성에 연결할 수 있습니다. 다음의 간단한 클래스를 생각해보십시오.
public class Cheese
{
public string Name { get; set; }
public double Age { get; set; }
public int StinkLevel { get; set; }
}
다음 TextBlock
의 DataContext
로 연결합니다.
<TextBlock Text="{Binding Name}">
<TextBlock.DataContext>
<local:Cheese Age="12" StinkLevel="100" Name="Limburger"/>
</TextBlock.DataContext>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding StinkLevel}" Value="100">
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
앞의 코드에서 TextBlock.Foreground
속성은 녹색입니다. 우리가 변경 한 경우 StinkLevel
100 이외의 다른 우리의 XAML에 속성을의 Text.Foreground
가 기본값입니다에 속성이 되돌아갑니다.