次の方法で共有


XAMLでTriggerの起動条件を指定する際に、複数のOR条件を一括で指定する方法

質問

2013年11月20日水曜日 4:52

XAMLにて、複数の条件の中でどれかを満たした際に、動作するTriggerを作成したいです。

ご存じの方がいれば教えていただきたいです。

ソースの例を上げますと、

例えば、ボタンのTagプロパティの値が、Nullか、空白だった場合に、

ボタンを無効化するようなことを考えております。

XAML

            <ControlTemplate.Triggers>                 
                <Trigger Property="Tag" Value="{x:Null}" >
                    <Setter Property="IsEnabled" Value="False" />
                </Trigger>
                <Trigger Property="Tag" Value="" >
                    <Setter Property="IsEnabled" Value="False" />
                </Trigger>
                <Trigger Property="IsEnabled" Value="False" >
                    <Setter TargetName="buttonPolygon" Property="Stroke" Value="Gray" />
                    <Setter TargetName="buttonPolygon" Property="Polygon.Fill" Value="LightGray" />
                </Trigger>
            </ControlTemplate.Triggers>

MulitiTriggerを利用すれば、複数の条件全てを満たす場合に利用できるとは思いますが、

複数の条件のどれかを満たす場合に動くTriggerを作成する場合は、

条件ごとにTriggerを一つ一つ作成しないといけないのでしょうか?

すべての返信 (3)

2013年11月20日水曜日 5:03 ✅回答済み

DataTriggerを使って、IValueConverterと併用するとか。


2013年11月20日水曜日 6:49 ✅回答済み

私もDataTriggerrで処理することが多いです。
まず、ボタンを有効にするかどうかのプロパティを追加します。例えば、「ボタン有効化」という名前のプロパティにします。このプロパティをボタンを有効にしたい場合はtrueに、無効にしたい場合はfalseにします。
次に、以下のようなStyleと作り、ボタンに適用します。このStyleをアプリケーション全体で使えるようにしておくと便利です。

<Style x:Key="ボタンStyle" TargetType="{x:Type Button}">
    <Setter Property="IsEnabled" Value="True" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding ボタン有効化}" Value="false">
            <Setter Property="IsEnabled" Value="False" />
        </DataTrigger>
    </Style.Triggers>
</Style>

★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


2013年11月21日木曜日 23:34

お忙しいところ、ご回答ありがとうございました。

教えていただいたDatatriggerを利用する方法で、うまく分岐させることができました。

ソースの例まで教えていただいてありがとうございます。