Inkscape(矢量图形软件)

4
我希望我的应用程序中有一个漂亮的矢量图形。谁不想呢?=D
经过一些研究,我发现有SVG文件格式(和其他一些格式),但是WPF(尽管其信条是“矢量图形等等”)不支持它。
我尝试了两个svg库,但它们真的很糟糕(所以我不会说它们的名字)。
然后我发现 Inkscape (免费的SVG编辑器)可以将svg文件保存为xaml文件。这里是这样一个文件的一部分:
<?xml version="1.0" encoding="UTF-8"?>
<Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Stretch="Uniform">
    <Canvas Name="svg2" Width="744" Height="1052">
        <Canvas.Resources>
        <!--Unknown tag: inkscape:perspective-->
        </Canvas.Resources>
        <!--Unknown tag: sodipodi:namedview-->
        <!--Unknown tag: metadata-->
        <Canvas Name="layer1">
            <Canvas Name="g2987">
                <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path2999" Fill="#FFE9E9FF">
                <Path.Data><PathGeometry Figures="m 299.04734 376.6985  ........

现在我的问题是如何使用这些XAML文件?我找到了这个答案,但是我仍然不知道如何在按钮内显示我的漂亮的矢量图形。它在另一个 XAML 文件中(不是定义窗口/应用程序的文件)。

我该如何组织这些文件以便于轻松地显示它们,例如:

<Button>
    <Button.Content> ... display it here somehow </Button.Content>
</Button>

为了将其作为单独的文件(不复制内容或其他任何东西)保留,以便我可以轻松地使用Inkscape进行更改或编辑。

我考虑过使用资源字典,但我无法想象那会是什么样子。

P.S .: 从另一个角度来看,我可以编写小型转换器,使原始文件保持为SVG,然后将它们导出为xaml,最后运行我的转换器,将其变成某些东西,然后可以将其轻松分配为按钮的内容。我需要指导如何将其视为单独的xaml,以及如何将其附加为按钮的内容。


对于那些不清楚我在问什么的人,我想问的是:如何将 Viewbox 分配给按钮内容?或者说,我应该怎么做才能将 Inkscape 生成的 xaml 分配为按钮内容。 - Sinatr
1个回答

6

首先创建ResourceDictionary,将导出的视图框添加到其中并为它们添加唯一的键。

<ResourceDictionary>
    <Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Stretch="Uniform" x:Key="buttonContent">
        <Canvas Name="svg2" Width="744" Height="1052">
        ...

将字典合并到您的窗口、用户控件甚至整个应用程序中。
<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ButtonDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
        ...

然后按照以下方式使用它,与您的按钮一起使用。
<Button Content="{StaticResource buttonContent}">

这是一个创建资源字典并使用它们的示例。


1
x:Shared="False"是这个答案中重要的补充。最终的解决方案(我使用了一年)是将Canvas作为svg文件的根元素,这样一堆画布(每个svg文件一个)就会被合并成单个资源字典,它们都有键,然后我在想要显示它们的地方使用ViewBox(因为我想能够设置视口大小)。 - Sinatr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接