2

我有自定义控件“CustomControl”,其中定义了自定义附加属性“CustomAttachedProperty”。控制正常工作,遵循 xaml 呈现,因为它应该是:

<ns:CustomControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:ns="using:MyNamespace">
   <TextBlock ns:CustomControl.CustomAttachedProperty="0" Text="This element causes Parse Error" />
</ns:CustomControl>

当我尝试通过 XamlReader.Load() 加载相同的 xaml 时,问题就开始了。问题的根源是附加属性。没有附加属性 XamlReader 能够正确加载字符串。

XamlReader.Load 在同一个程序集中调用,其中定义了 CustomControl。

有人有想法有什么问题吗?

4

1 回答 1

1

我无法给出完整的答案,但问题在于新的 xaml 平台及其处理反射和元数据的方式。基本上是因为 xaml 平台是原生的,它无法访问反射来正确解析 xaml。

解决此问题的方法是使用 IXamlMetadataProvider,老实说,实施起来很麻烦。正常构建过程的一部分会为您的应用程序创建一个,但它不能与 xaml 阅读器和您的库一起正常工作。你最终需要自己实现一个。您可以在 XamlTypeInfo.g.cs 的 obj/Debug 文件夹中为您的应用创建一个。

我的解决方案是创建一个小项目,其中包含我要在 App.xaml.cs 中解析的 xaml,让编译器构建上述文件,然后将其撕掉以创建我自己的。

如果您查看对 Caliburn Micro 的提交,您可以看到我最终得到了什么。

于 2013-05-31T03:14:09.557 回答