1

以下のスタイルを宣言しました。vb.net でスタイルの前景色を動的にオーバーライドするにはどうすればよいですか?

<Style x:Key="LabelWinner" TargetType="{x:Type Label}">
        <Setter Property="Effect">
            <Setter.Value>
                <DropShadowEffect Color="#FF000000" ShadowDepth="6" />
            </Setter.Value>
        </Setter>
        <Setter Property="Foreground" Value="#FFFF0000"/>
    </Style>
4

1 に答える 1

1

コメントで述べたように、@nitWPF には強力なシステム動作プロパティが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>

MSDNWPF には値の優先順位のリスト ( ) があり、トリガー スタイルよりも優先度の高いローカル値があることを覚えておく必要があります。したがって、プロパティの値が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>
于 2013-08-31T09:09:09.307 に答える