如何正确地重用wpf中的矢量图像

时间:2014-11-27 14:15:27

标签: c# wpf xaml vector-graphics

X问题:

我想在WPF中使用矢量图形。

我有一堆SVG文件,我可以使用Inkscape将其转换为XAML。生成的xaml为ResourceDictionaryViewBox / Canvas包含Path等。字典合并到App.xaml,我可以使用密钥来访问它们。

问题:如何使用此类图片看起来我没有正确使用它们。

以下是我使用它们的方式

<Viewbox Child="{StaticResource MyImageResourceKey}" Width="100" Height="100"/>

但看起来我只能一次(在一个地方)使用它!尝试同时在多个地方使用该图像将从之前的位置删除它或将抛出

  

System.ArgumentException:在附加到新的父Visual之前,必须断开指定的子视图与当前父Visual。

Y问题

我想显示矢量图像列表。我像这样显示它们

<ItemsControl ItemsSource="{Binding Images}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Viewbox Width="100" Height="100">
                <ContentPresenter Content="{Binding Image}"/>
            </Viewbox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl> 

视图模型

public class ViewModelSomeWindow : INotifyPropertyChanged
{
    public class MyImage
    {
        public object Image { get; set; }
    }

    private ObservableCollection<MyImage> _images;
    public ObservableCollection<MyImage> Images
    {
        get { return _images; }
        set { _images = value; OnPropertyChanged(); }
    }
    ...
}

并且像这样添加项目

Images.Add(new MyImage() { Image = App.Current.Resources["MyImageResourceKey"] });

问题:当第二项使用相同图像("MyImageResourceKey")时,第一项显示(空白)图像。如果图像已经在某处使用StaticResource显示,则添加项目将会高于ArgumentException

P.S。:我需要解决Y problem,但也许我没有正确使用矢量图。

1 个答案:

答案 0 :(得分:2)

请在路径中使用 x:shared = false ,如附件中所示

enter image description here

并访问此链接以获取reference