如何正确地在WPF中重复使用矢量图像

4

X问题:

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

我有一堆SVG文件,可以通过使用Inkscape将其转换为XAML。生成的XAML是带有ViewBox/CanvasPath等内容的ResourceDictionary。这些字典会合并到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。
附言:我需要解决Y问题,但可能我没有正确使用矢量图形。

5
在路径中使用x:shared =false,并访问http://prntscr.com/5aoa21。同时,也请查看此链接http://msdn.microsoft.com/en-us/library/aa970778%28v=vs.110%29.aspx。 - Heena
就是这样了,非常感谢! - Sinatr
@HeenaKishorPatil 考虑将您的评论添加为答案,以便问题可以标记为已解决。 - Nawed Nabi Zada
1个回答

2
请在路径中使用如附图所示的 x:shared=false

enter image description here

并且也访问此链接以获取参考资料

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