2012-05-01 25 views
12

我想加载存储为XAML文件(单独文件,不在字典中)的矢量图形,嵌入到我的应用程序中,我有几个问题需要这样做:以编程方式在WPF应用程序中加载XAML文件中的矢量图形

  1. XAML看起来有点模糊的,因为它可以被用来表示任一像载体的图像,或正被动态构建像WPF的那些接口的静态资源。因此,XAML矢量图的格式对我来说还不清楚:应该是什么样的根元素,比如svg矢量图像的“svg”标签?目前,我使用Canvas作为顶层元素,因为我想在另一个Canvas中绘制图形。

  2. 什么是以编程方式加载这些文件的最佳方法(我的意思是,从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'是我的应用程序的主Canvas的名称。

最后一种情况:* .xaml文件的属性'BuildAction'必须设置为'Resource',否则会遇到一个XamlParseException,其值为十六进制值0x0C(要更改此属性,请右键单击文件项目树视图)。

希望这可以帮助。

+0

您在MainWindow.xaml中使用哪些代码来引用C#? – Hoby

相关问题