2017-10-24 4 views
0

バインドされたブール値プロパティを使用してトリガされるDataTriggerに基づいてスタイルを変更するTextBockがあります。 私が望むのは、バインドされたプロパティの値がtrueの場合、テキストのForeGroundカラーを変更することです。 falseの場合は、「デフォルト」スタイル(BodyValueStyle1)をもう一度使用したいと思います。私は今のところそれを行う方法 は次のとおりです。DataTriggerを使用してWPFコントロールの「デフォルト」スタイルを設定する方法

<TextBlock.Style> 
    <Style BasedOn="{StaticResource BodyValueStyle1}" TargetType="{x:Type TextBlock}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsTrueOrFalse}" Value="True"> 
       <Setter Property="TextBlock.Foreground" Value="Red"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding IsTrueOrFalse}" Value="False"> 
       <Setter Property="TextBlock.Foreground" Value="Black"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</TextBlock.Style> 

それは正常に動作し、私が欲しいものを行いますが、私は好まないことは、次のとおりです。

<DataTrigger Binding="{Binding IsTrueOrFalse}" Value="False"> 
    <Setter Property="TextBlock.Foreground" Value="Black"/> 
</DataTrigger> 

「リセット」する方法はあります(BodyValueStyle1)に設定するのではなく、以前に変更したすべてのプロパティを設定するのではなく、デフォルトのスタイル(BodyValueStyle1)に変更しますか?とにかく私のデフォルトのForeGroundの色は黒であるので、 です。

答えて

3

あなたはBodyValueStyle1Setterお持ちの場合:

<Setter Property="Foreground" Value="Black" /> 

を次に2番目のDataTriggerを削除することができます。トリガーの動作は既にあなたが望むものです。

ソース

Another Stack Overflow question with explanation

トリガ条件がもはや満たされたときに自動的に以前の値にリセットされるトリガーによって変化しない特性を示します。トリガーは、ButtonのIsPressedやListBoxItemのIsSelectedなど、元の状態に戻って変更されることが予想される一時的な状態に対して最適化されています。関心のあるプロパティは、依存プロパティでなければなりません。

関連する問題