X问题:
我想在WPF中使用矢量图形。
我有一堆SVG文件,可以通过使用Inkscape将其转换为XAML。生成的XAML是带有ViewBox
/Canvas
和Path
等内容的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问题,但可能我没有正确使用矢量图形。