0

だから私は初めてwpfアプリケーションを使っていて、つまずきに遭遇しました。

私はサードパーティ (actipro) のテーマを使用しており、そのテーマ内の個々のプロパティを好きなように設定できます。

<Style.Resources>
    <SolidColorBrush   x:Key="{x:Static themes:AssetResourceKeys.ExpanderHeaderBackgroundNormalBrushKey}" Color="Yellow" />
</Style.Resources>

私がやりたいのは、実際には、その宣言をトリガー内に配置することです。

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
              <SolidColorBrush   x:Key="{x:Static themes:AssetResourceKeys.ExpanderHeaderBackgroundNormalBrushKey}" Color="Yellow" />
    </Trigger>
</Style.Triggers>

しかし、これはもちろん不正な構文です。

このような条件付きスタイルを設定できることを知っています

<Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
                  <Setter Property="Background" Value="Yellow" />
        </Trigger>
</Style.Triggers>

またはこのように

<Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
                  <Setter Property="Background" Value="{StaticResource {x:Static themes:AssetResourceKeys.ExpanderHeaderBackgroundNormalBrushKey}}" />
        </Trigger>
</Style.Triggers>

ただし、これにより、背景がリソースによって定義された色に設定されます。それは私が求めているものではありません。
セッターが使用できるプロパティではない ExpanderHeaderBackground を設定する必要があります。

私の考えでは、トリガー内でリソース自体を定義できることは理にかなっているように思えます。その後、何らかの条件が満たされた場合にのみ適用されます。明らかに、それは wpf の仕組みではありません。

これを達成する方法を知っている人はいますか?

4

1 に答える 1

0

スタイル リソースでリソースを設定できますが、トリガー自体では設定できません。

<Style TargetType="Control">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static themes:AssetResourceKeys.ExpanderHeaderBackgroundNormalBrushKey}" Color="Yellow" />
    </Style.Resources>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="{StaticResource themes:AssetResourceKeys.ExpanderHeaderBackgroundNormalBrushKey}" />
        </Trigger>
    </Style.Triggers>
</Style>

トリガー自体は特定のリソースを提供しません。実現したいことが、リソース キーに基づいて特定のリソースをオーバーライドすることであり、UI の動作 (MouseOver など) に応じて、コード ビハインドを使用してそれを行う必要があります。

編集:私は Actipro に精通していませんが、リソース キーに基づいてリソースをオーバーライドしてテーマをカスタマイズすることを提案していますか? 信頼できる結果が得られないため、あまり良い方法とは見なされません。

于 2013-04-18T13:25:57.127 に答える