使用触发器来更改在ResourceDictionary中声明的路径的颜色。

13 浏览
0 Comments

使用触发器来更改在ResourceDictionary中声明的路径的颜色。

我正在创建一个单选按钮样式。该单选按钮具有一个边框,其承载了一个ContentControl。ContentControl的Content属性设置为在单独的ResourceDictionary中声明的Path(FemaleVector)。当单选按钮被选中时,如何更改路径的填充属性?以下是我目前的代码。我可以更改边框的背景属性,但是设置ContentControl的Foreground属性并不能改变路径的颜色。(我没想到那样会起作用。)


我不喜欢在我的样式中使用长路径的Data属性,所以我将它们移到了单独的ResourceDictionary中。我应该将Path放回样式中,而不是保留在单独的ResourceDictionary中吗?

编辑:类似的问题可以在这里这里找到。

0
0 Comments

问题的原因是使用触发器更改在ResourceDictionary中声明的路径的颜色时遇到了编译错误。解决方法有以下几种:

1. 将样式保留在本地样式资源部分中,这样可以更好地看到整体效果。如果样式没有在其他地方重用,则应该将其保留在ResourceDictionary中。

2. 使用以下代码更改Fill属性:<Setter Property="Content.Fill" TargetName="content" Value="Blue"/>

3. 如果这个方法不起作用,可以尝试以下几种方法:

- 在Xaml中使用Trigger.EnterActions<>。通过动画设置属性可能会有更好的效果,因为ControlTemplate触发器的设置器有时会有限制。

- 还有相对绑定。但是在使用相对绑定时要小心(如果您打算将其重用)。

- 在FemaleVector样式中,可以将Fill绑定到ContentControl的Foreground。在Google中搜索RelativeBinding。

- 还有属性继承。如果在FemaleVector中设置Fill颜色,则需要使用样式进行设置,例如:<Style><Setter Property="Fill" Value="BLACK" /></Style>,然后可以在ContentControl中设置样式并在那里添加触发器。

<ContentControl.Style><Style><Style.Triggers>
   <DataTrigger Binding={Binding IsChecked, RelativeSource={RelativeSource AncestorType=RadioButton}} Value=TRUE>
   <Setter Property="Path.Fill" Value="BLACK" />
   </DataTrigger>

4. 添加了更多选项,至少其中一种方法应该能起作用。祝你好运!

0