コメントで述べたように、@nit
WPF には強力なシステム動作プロパティがStyle.Triggers
.
以前はWinForms
、特定のプロパティを変更するために、あまり快適で実用的ではないコードを使用する必要がありました。WPF の開発者は、プログラムの外観に関連するビジュアル ロジックと、プログラムの望ましい動作を含むビジネス ロジックを分離することにしました。実際、それはでしたStyle
。
トリガーを設定するStyle
には、適切なプロパティを選択する必要があります。トリガーは次のとおりです。
<Trigger Property="SomeProperty" Value="SomeValue">
... Some actions by way of setters...
</Trigger>
たとえば、マウス カーソルをホバーすると、Foreground
色が と に変わることを確認したいと考えていますFontSize
。次に、プロパティを選択してIsMouseOver
、次のように記述しTrigger
ます。
<Style x:Key="LabelWinner" TargetType="{x:Type Label}">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="#FF000000" ShadowDepth="6" />
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Green" />
<Setter Property="FontSize" Value="14" />
</Trigger>
</Style.Triggers>
</Style>
MSDN
WPF には値の優先順位のリスト ( ) があり、トリガー スタイルよりも優先度の高いローカル値があることを覚えておく必要があります。したがって、プロパティの値がLabel
ローカルに設定される場合、トリガーはそれを変更できません。次に例を示します。
<Label Foreground="Red" ... /> <!-- Trigger don't change foreground -->
標準プロパティがない場合、またはシナリオを実装する必要がある場合は、依存関係プロパティ ( MSDN
) が添付されています。その中で、たとえば、アニメーションを開始し、それが機能するスタイルでトリガーするなど、任意の条件を設定できます。
依存関係プロパティが添付されたトリガーの例:
<Trigger Property="local:YourClass.MyProperty" Value="True">
<Setter TargetName="SaveButton" Property="Background" Value="AliceBlue" />
</Trigger>