수색…


소개

Trigger , DataTrigger , MultiTrigger , MultiDataTriggerEventTrigger 포함하여 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; }
}

다음 TextBlockDataContext 로 연결합니다.

<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 가 기본값입니다에 속성이 되돌아갑니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow