#wpf #xaml #svg #data-binding #sharpvectors
Вопрос:
В моем приложении WPF у меня есть сетка с фиксированным набором изображений SVG (я использую библиотеку SharpVectors)
<Image Grid.Column="0" Grid.Row="0" Source="{svgc:SvgImage Source=Resources/0.svg}" Stretch="Fill"/>
<Image Grid.Column="1" Grid.Row="0" Source="{svgc:SvgImage Source=/Resources/1.svg}" Stretch="Fill"/>
<Image Grid.Column="2" Grid.Row="0" Source="{svgc:SvgImage Source=Resources/2.svg}" Stretch="Fill"/>
<Image Grid.Column="1" Grid.Row="0" Source="{svgc:SvgImage Source=/Resources/3.svg}" Stretch="Fill"/>
Теперь я хочу иметь элемент управления, где я бы привязывал список путей к SVG, что-то вроде этого:
<ItemsControl DataContext="{Binding DataContext}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Stretch="Fill" Width="100" Height="100">
<Image.Source>
<renderers:SvgImageSource/> <!-- What should be used here as a path??? -->
</Image.Source>
</Image>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Но я не понимаю, как использовать строковый путь в renderers:SvgImageSource
теге.
Комментарии:
1. Что такое SvgImageSource? Похоже, что у SharpVectors есть только класс SvgImageExtension, который является MarkupExtension .
2. Как примечание,
DataContext="{Binding DataContext}"
полностью избыточно.3. @Clemens да, спасибо, удалил его
Ответ №1:
Задайте URI ItemsSource
для вашего SVG-изображения. Затем вы можете использовать SvgImageConverter
для привязки.
<ItemsControl ItemsSource="{Binding YourSvgUriItems}">
<ItemsControl.Resources>
<svgc:SvgImageConverter x:Key="SvgImageConverter"/>
</ItemsControl.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Stretch="Fill" Width="100" Height="100"
Source="{Binding Converter={StaticResource SvgImageConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Ответ №2:
Вы могли бы попытаться выполнить привязку к пути и использовать класс SvgImageConverterExtension:
<Image Stretch="Fill" Width="100" Height="100">
<Image.Source>
<Binding Path="YourUriProperty">
<Binding.Converter>
<converters:SvgImageConverterExtension />
</Binding.Converter>
</Binding>
</Image.Source>
</Image>