3

私は現在、スタイル付きコントロールのいくつかのプロパティを設定するために、WPF と MultiTrigger と Conditions の使用を学んでいます。セッターによって指定された値を設定するには、MultiTrigger の条件がすべて満たされている (AND 演算子) 必要があることを知っています。

しかし、値が満たされない場合、条件は存在しますか (NotCondition と名付けましょう)。私が何を意味するかを説明するための小さな例があります。

マウスがコントロールの上にあり、コンテンツが'Hello World'の場合、Background-Property は'Red'に設定する必要があります。もう 1 つのケースは、マウスが上にあり、コンテンツが'Hello World'でない場合、背景は'Blue'であるべきです。

 <MultiTrigger>
   <MultiTrigger.Conditions>
     <Condition Property="IsMouseOver" Value="True" />
     <Condition Property="Content" Value="Hello World" />
   </MultiTrigger.Conditions>
   <Setter Property="Background" Value="Red"/>
 </MultiTrigger>
 <MultiTrigger>
   <MultiTrigger.Conditions>
     <Condition Property="IsMouseOver" Value="True" />
     <!--<NotCondition Property="Content" Value="Hello World" />-->
   </MultiTrigger.Conditions>
   <Setter Property="Background" Value="Blue"/>
 </MultiTrigger>

このようなものを WPF/XAML でアーカイブするにはどうすればよいですか? 比較を否定する NotCondition-Element または Condition-Element の属性はありますか?

4

1 に答える 1

4

この特定の色のケースでは、トリガーの優先順位を使用できます。例えば

<Trigger Property="IsMouseOver" Value="True">
  <Setter Property="Background" Value="Blue"/>
</Trigger>
<MultiTrigger>
 <MultiTrigger.Conditions>
  <Condition Property="IsMouseOver" Value="True"/>
  <Condition Property="Text" Value="Hello world"/>
 </MultiTrigger.Conditions>
 <Setter Property="Background" Value="Red"/>
</MultiTrigger>

マウスが上にあり、テキストがHello worldの場合、最新のトリガーは最初のトリガーの効果をオーバーライドします。

WPF には、条件付きトリガーを実行できる組み込み機能はありませんが Mike Hillberg は、この問題に対して非常に興味深い解決策を 1 つ提案しています: A Comparable DataTrigger

お役に立てれば

于 2010-02-24T09:52:16.360 に答える