创建WPF控件以显示矢量图标

时间:2018-06-20 04:10:40

标签: c# wpf

我正在尝试研究Material Design for XAML源代码。

这是他们的GitHub:

这是我正在寻找的代码:

这是PackIcon的帮助程序类:

目前,我正在看他们的图标包示例,并对其进行快速测试。

这是测试班:

public class PackIconTest : Control
{
    static PackIconTest()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(PackIconTest), new FrameworkPropertyMetadata(typeof(PackIconTest)));
    }

    public PackIconTest()
    {
        Data = "M4.93,4.93C3.12,6.74 2,9.24 2,12C2,14.76 3.12,17.26 4.93,19.07L6.34,17.66C4.89,16.22 4,14.22 4,12C4,9.79 4.89,7.78 6.34,6.34L4.93,4.93M19.07,4.93L17.66,6.34C19.11,7.78 20,9.79 20,12C20,14.22 19.11,16.22 17.66,17.66L19.07,19.07C20.88,17.26 22,14.76 22,12C22,9.24 20.88,6.74 19.07,4.93M7.76,7.76C6.67,8.85 6,10.35 6,12C6,13.65 6.67,15.15 7.76,16.24L9.17,14.83C8.45,14.11 8,13.11 8,12C8,10.89 8.45,9.89 9.17,9.17L7.76,7.76M16.24,7.76L14.83,9.17C15.55,9.89 16,10.89 16,12C16,13.11 15.55,14.11 14.83,14.83L16.24,16.24C17.33,15.15 18,13.65 18,12C18,10.35 17.33,8.85 16.24,7.76M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10Z";
    }

    private static readonly DependencyPropertyKey DataPropertyKey =
        DependencyProperty.RegisterReadOnly(nameof(Data), typeof(string), typeof(PackIconTest), new PropertyMetadata(""));

    public static readonly DependencyProperty DataProperty = DataPropertyKey.DependencyProperty;

    [TypeConverter(typeof(GeometryConverter))]
    public string Data
    {
        get { return (string)GetValue(DataProperty); }
        private set { SetValue(DataPropertyKey, value); }
    }
}

以下是XAML的用法:

<local:PackIconTest Width="200" Height="200"/>

该图标不显示。我想念什么?

1 个答案:

答案 0 :(得分:0)

我通过制作一种适用于PackIconTest目标类型的样式解决了这个问题。

这是xaml代码:

    <Window.Resources>
    <Style TargetType="local:PackIconTest">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Path Data="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Data}"
                          Stroke="Black"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>