いつStyle.Triggers
を選択する必要があり、いつControlTemplate.Triggers
を選択する必要がありますか?相互に使用する利点はありますか?
同じ結果を達成するこれらのスタイルがあるとしましょう:
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
...
</Setter>
<Style.Triggers>
...
</Style.Triggers>
</Style>
Updatefrom 背景はボタンC#WPFを変更しません Windows 8のボタンはIsMouseOverのControlTemplate.Triggerを使用するため、目的の機能を取得するには、ControlTemplate
を完全に上書きする必要がある場合があります。したがって、StyleトリガーではなくControlTemplateトリガーを使用する必要がある場合です。
デフォルトのControlTemplate
を常にオーバーライドする必要はありません。コントロールがあり、Foreground
がtrueの場合、すべてのMyTextControlに青色のIsMouseOver
を設定し、それ以外はすべてデフォルトのままにしておきます。次のようなものを使用できます。
<Style TargetType="{x:Type MyTextControl}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
ControlTemplate.Triggers
を使用したい場合は、デフォルトのMyTextControl
Template
をコピーする必要があります。そうしないと、ビジュアルが表示されなくなります。
それを除けば、唯一の違いは、Style.Triggers
の優先順位がControlTemplate.Triggers
よりも低いことだと思います( Precedence documantation )。ただし、両方のトリガータイプを使用する場合にのみ問題になります。