我想在WPF中使用矢量图形。
我有一堆SVG文件,我可以使用Inkscape将其转换为XAML。生成的xaml为ResourceDictionary
,ViewBox
/ Canvas
包含Path
等。字典合并到App.xaml
,我可以使用密钥来访问它们。
问题:如何使用此类图片?看起来我没有正确使用它们。
以下是我使用它们的方式
<Viewbox Child="{StaticResource MyImageResourceKey}" Width="100" Height="100"/>
但看起来我只能一次(在一个地方)使用它!尝试同时在多个地方使用该图像将从之前的位置删除它或将抛出
System.ArgumentException:在附加到新的父Visual之前,必须断开指定的子视图与当前父Visual。
我想显示矢量图像列表。我像这样显示它们
<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
,但也许我没有正确使用矢量图。