我有一个场景。我有自定义矢量徽标,我在单独的xaml文件MyLogo.xaml中定义。我还添加了默认填充颜色。
现在,当我运行我的应用程序时,我想根据枚举值更改它的颜色,但不知何故它不会改变......有人可以帮助我吗?
这是我的徽标的xaml并触发声明:
<misc:MyLogo
DockPanel.Dock="Top"
Height="200"
Margin="0 30 0 0">
<misc:MyLogo.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding MyEnum}" Value="{x:Static enum:MyEnum.ValueOne}">
<Setter Property="Path.Fill" Value="#FFFFFF" />
</DataTrigger>
<DataTrigger Binding="{Binding MyEnum}" Value="{x:Static enum:MyEnum.ValueTwo}">
<Setter Property="Path.Fill" Value="#000000" />
</DataTrigger>
</Style.Triggers>
</Style>
</misc:MyLogo.Style>
</misc:MyLogo>
如果它有助于我使用Caliburn Micro。那么请你告诉我哪里有错误,o那里有什么样的解决方法?
我尝试了How to change a path fill (on a button) with triggers in XAML解决方案,但没有帮助......
更新1
MyLogo.xaml
正如您所见,Path有默认的填充值:
<Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Stretch="Uniform">
<Canvas Name="svg4" Width="10" Height="9">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0"/>
</Canvas.RenderTransform>
<Canvas.Resources/>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path2" Fill="#FFFFFFFF">
<Path.Data>
<PathGeometry Figures="M10 4.194v.612H1.195L5.049 8.57l-.44.43L0 4.5 4.608 0l.441.43-3.854 3.764z" FillRule="EvenOdd"/>
</Path.Data>
</Path>
</Canvas>
</Viewbox>
更新2(问题答案) 经过一些研究,我终于设法解决了我的问题......所以如果有人会面对这个问题,那么最简单的解决方案是:
在评论中,一些用户写信告诉我,我应该从我的xaml中删除Viewbox和Canvas元素,然后你可以保留它(在我的场景中,如果它生成则是svg自动生成的xaml文件,那么它应该是有效的是)
要更改徽标的颜色,我必须为我的xaml创建依赖属性。它看起来像这样:
public partial class MyLogo: UserControl
{
public static readonly DependencyProperty BackgroundFillProperty =
DependencyProperty.Register("BackgroundFill", typeof(SolidColorBrush), typeof(MyLogo), new PropertyMetadata(new SolidColorBrush()));
public MyLogo() => InitializeComponent();
public SolidColorBrush BackgroundFill
{
get => (SolidColorBrush)GetValue(BackgroundFillProperty);
set => SetValue(BackgroundFillProperty, value);
}
}
然后在MyLogo.xaml中,我使用以下内容更改了我的Fill属性:
Fill="{Binding BackgroundFill, RelativeSource={RelativeSource AncestorType=UserControl}}"
最后在我看来触发器的位置,我将setter改为:
<Setter Property="misc:MyLogo.BackgroundFill" Value="#ffffff" />
就是这样..希望有人会觉得这很有用:)