Отображение связанного списка файлов svg

#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: