【发布时间】:2011-09-23 15:03:18
【问题描述】:
我正在为 WPF 应用程序制作主题编辑器。我动态生成 XAML 文件,然后将它们编译成应用程序使用的 DLL。用于生成 XAML 文件的代码遵循以下几行:
var dictionary = new ResourceDictionary();
...
dictionary.Add(key, new BitmapImage { UriSource = new Uri(relativePath, UriKind.Relative) });
...
XamlWriter.Save(dictionary, "myDictionary.xaml");
我的问题是XamlWriter.Save 还序列化了BaseUri 属性:
<BitmapImage BaseUri="{x:Null}" UriSource="Images\myImage.png" x:Key="myImage" />
结果是,当应用程序尝试获取此图像时,它没有找到它,因为未设置BaseUri。通常 XAML 解析器设置这个属性(通过IUriContext 接口),但是当它已经在 XAML 中显式设置时,解析器不会设置它,所以它保持为空。
有没有办法防止XamlWriter 序列化BaseUri 属性?
如果我正在序列化一个自定义类,我可以添加一个ShouldSerializeBaseUri() 方法,或者显式实现IUriContext(我尝试了这两个选项并且它们给出了想要的结果),但是对于BitmapImage,如何做到这一点呢?
作为最后的手段,我可以加载 XAML 文件并使用 Linq to XML 删除属性,但我希望有一个更简洁的解决方案。
【问题讨论】:
标签: .net wpf xaml serialization xamlwriter