Wpf Xaml更改画布属性“Path.Fill”

时间:2018-06-13 14:31:03

标签: c# wpf xaml

我有一个场景。我有自定义矢量徽标,我在单独的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(问题答案) 经过一些研究,我终于设法解决了我的问题......所以如果有人会面对这个问题,那么最简单的解决方案是:

  1. 在评论中,一些用户写信告诉我,我应该从我的xaml中删除Viewbox和Canvas元素,然后你可以保留它(在我的场景中,如果它生成则是svg自动生成的xaml文件,那么它应该是有效的是)

  2. 要更改徽标的颜色,我必须为我的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);
    }
    

    }

  3. 然后在MyLogo.xaml中,我使用以下内容更改了我的Fill属性:

     Fill="{Binding BackgroundFill, RelativeSource={RelativeSource AncestorType=UserControl}}"
    

    最后在我看来触发器的位置,我将setter改为:

    <Setter Property="misc:MyLogo.BackgroundFill" Value="#ffffff" />
    

    就是这样..希望有人会觉得这很有用:)

0 个答案:

没有答案