Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在触发器中嵌入资源列表以应用条件主题_Wpf_Xaml - Fatal编程技术网

Wpf 在触发器中嵌入资源列表以应用条件主题

Wpf 在触发器中嵌入资源列表以应用条件主题,wpf,xaml,Wpf,Xaml,因此,我第一次使用wpf应用程序,遇到了一个绊脚石 我正在使用第三方(actipro)的主题,我可以将该主题中的各个属性设置为我想要的任何属性 <Style.Resources> <SolidColorBrush x:Key="{x:Static themes:AssetResourceKeys.ExpanderHeaderBackgroundNormalBrushKey}" Color="Yellow" /> </Style.Resources>

因此,我第一次使用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>

甚至像这样

<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,它不是setter的可用属性

在我看来,在触发器中定义资源本身似乎是合乎逻辑的。那么,只有在满足某些条件的情况下,它们才会适用。显然,wpf不是这样工作的


有人知道我是如何做到这一点的吗?

您可以在样式资源中设置资源,但不能在触发器本身中设置

<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行为(例如鼠标悬停),那么您必须使用代码隐藏来实现


编辑:我不熟悉Actipro,但他们是否建议通过基于资源键覆盖资源来定制主题?这不是一个很好的实践,因为它不会产生可靠的结果。

我不想覆盖资源,我想有条件地应用它们。我尝试过你之前发布的代码,但不幸的是,这不是我想要的。我想我得到了你的功能要求^^^^,但实际上,做,即使看起来不像,也是一种覆盖。如果您想有条件地应用笔刷,您必须找到它在控件模板中的使用位置,并通过触发器将其更改:)这实际上只是一个验证场景,在web应用程序中非常容易处理。但是有条件地改变这个第三方控件的外观似乎比它应该做的要困难得多。您能告诉我您使用的控件是什么吗?