Почему SVG-изображение некорректно отображается в программе?

#wpf

#wpf

Вопрос:

Я хочу отобразить SVG-файл в WPF, и я обнаружил, что многие люди рекомендуют использовать sharpvectors .

Я использовал его с XAML, как показано ниже:

 <Window x:Class="KongGamLung.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:KongGamLung"        
        xmlns:SVG="http://sharpvectors.codeplex.com/svgc/"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <SVG:SvgViewbox Source="Create.svg" AutoSize="True" OptimizePath="False" TextAsGeometry="True"></SVG:SvgViewbox>
    </Grid>
</Window>
  

Что ж, SVG-файл корректно отображается в редакторе:
введите описание изображения здесь

Однако после того, как я запустил программу, SVG исчез. введите описание изображения здесь

Почему получается так? Более того, я попробовал несколько SVG-пакетов в NUGET. Но они хуже этого, которые не могут отображаться даже в редакторе.

Как я могу это решить? И если есть SVG-пакет получше этого, пожалуйста, порекомендуйте его мне. Спасибо.


введите описание изображения здесь

Комментарии:

1. Где у вас на компьютере находится файл Create.svg? Вы включили файл как ресурс в проект?

2. Я еще не отредактировал тему. Я создаю его с помощью Adobe illustrator и включил в качестве ресурса в проект. @MathivananKP

Ответ №1:

У вас есть 2 варианта.

  1. Если вы задаете для действия сборки svg-файла значение «Содержимое», то вам следует задать для параметра Копировать в выходной каталог значение «Копировать всегда» или «Копировать, если новее».
  2. Если вы установите для действия сборки svg-файла значение «Ресурс», оно будет использоваться как ресурс сборки, к которому можно получить доступ с помощью URI пакета файлов ресурсов.

Затем вы можете использовать его в XAML, как показано ниже, и вы можете установить Copy to Output Directory на «Не копировать».

 <SVG:SvgViewbox Source="Create.svg"
                AutoSize="True" OptimizePath="False" TextAsGeometry="True"/>
  

Комментарии:

1. Я использовал вариант 2, и он работает. Интересно, это из-за Visual Studio или sharpvectors? Я боюсь этих вещей, потому что оно не сообщает ни о какой ошибке.

2. Мне интересно, почему здесь необходим префикс Pack URI. Если вы задаете свойству Source элемента Image значение путь к ресурсам сборки, вы можете опустить его в XAML, поскольку анализатор XAML добавляет его автоматически. Source="/Create.svg" Возможно, работает?