サーチ…


前書き

TriggerDataTriggerMultiTriggerMultiDataTrigger 、およびEventTriggerを含む、WPFで利用可能なさまざまな種類のトリガについての議論。

トリガーでは、 FrameworkElementまたはFrameworkContentElementから派生したクラスによって、トリガーで定義された特定の条件に基づいてプロパティを設定または変更できます。基本的に、要素のスタイルを設定することができれば、同様にトリガすることができます。

備考

  • EventTriggerを除くすべてのトリガーは、 <Style>要素内で定義する必要があります。 EventTriggerは、 <Style>要素またはコントロールのTriggersプロパティで定義できます。
  • <Trigger>要素には、任意の数の<Setter>要素を含めることができます。これらの要素は、 <Trigger>要素の条件が満たされたときに、包含要素のプロパティを設定します。
  • ルート要素のマークアップでプロパティが定義されている場合、トリガ条件が満たされていても、 <Setter>要素で定義されたプロパティの変更は有効になりません。 <TextBlock Text="Sample">というマークアップを考えてみましょう。ルートプロパティ定義はスタイルで定義されたプロパティよりも優先されるため、進行中のコードのTextプロパティはトリガに基づいて決して変更されません。
  • バインディングと同様に、いったんトリガが使用されると、トリガは変更できません。

引き金

Triggerは、5つのトリガタイプの中で最も簡単なもので、同じコントロール内の他のプロパティに基づいてプロパティを設定します。

<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、同じコントロール内のプロパティにのみ適用されるという点で、標準の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はアクティブにならないことに注意して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プロパティはGreenになります。我々は変更する場合StinkLevel 100以外に、当社のXAMLでプロパティを、 Text.Foregroundプロパティは、それのデフォルト値に戻ります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow