2012-05-01 3 views
12

Я хотел бы загрузить векторную графику, хранящуюся в виде файлов XAML (отдельные файлы, а не в словаре), встроенные в мое приложение, и у меня есть несколько вопросов для этого:Загрузка векторной графики из файлов XAML программно в приложение WPF

  1. XAML выглядит немного неоднозначно, так как он может быть использован для представления либо статические ресурсы, такие как векторные изображения, или интерфейсы, которые динамично построены так, как в WPF. Из-за этого формат векторного изображения XAML не ясен для меня: каким должен быть корневой элемент, например, тег «svg» для векторных изображений svg? В настоящее время я использую Canvas в качестве верхнего элемента, так как хочу рисовать свою графику на другом холсте.

  2. Каков наилучший способ загрузки этих файлов программно (я имею ввиду, чтобы создать Canvas из xaml-файлов)? Я видел (и пытался) различные решения с XamlReader, но ничего не получилось: приложение аварийно завершает работу, и отладчик не помогает (большинство проблем, с которыми я столкнулся, похоже, возникают во время разбора, и сообщение об ошибке было неясным).

Я прочитал http://learnwpf.com/post/2006/06/04/How-do-I-Include-Vector-Based-Image-Resources-in-my-WPF-Application.aspx, но ссылка на статью дело с файлами ресурсов загрузки мертв, и образы не создаются с использованием C# код.

+12

Замечательно, что вы нашли решение и поделились со всеми, будет полезно, если вы можете добавить решение в качестве ответа и принять его как «Ответ», а не добавить его в вопрос. – akjoshi

ответ

8

Хорошо, я нашел решение сам, и вот оно:

Мой проект называется «Редактор», и я поместил файл XAML я хочу прочитать в папке «Графика». Этот файл называется «Image.xaml». Проект дерево выглядит следующим образом:

enter image description here

Сам XAML файл содержит этот код:

<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     Width="40" Height="40"> 
    <Rectangle Canvas.Left="0" Canvas.Top="0" Fill="White" Stroke="Black" StrokeThickness="1" Height="40" Width="40" /> 
    <!-- ... --> 
</Canvas> 

(задание с XAML имен 'Xmlns' необходима)

Код, используемый для загрузки файла:

StreamResourceInfo sr = Application.GetResourceStream(new Uri("Editor;component/Graphics/Image.xaml", UriKind.Relative)); 
Canvas result = (Canvas)XamlReader.Load(new XmlTextReader(sr.Stream)); 
layoutRoot.Children.Add(result); 

«layoutRoot» - это название основного холста моего приложения.

Последняя подредактива: свойство 'BuildAction' файла * .xaml должно быть установлено в 'Resource', или вы столкнетесь с XamlParseException с шестнадцатеричным значением 0x0C (чтобы изменить это свойство, щелкните правой кнопкой мыши файл в project treeview).

Надеюсь, это поможет.

+0

Какой код вы используете в MainWindow.xaml, чтобы ссылаться на C#? – Hoby

Смежные вопросы