我有自定义控件“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。
任何人都有想法出了什么问题?
答案 0 :(得分:1)
我无法给出完整的答案,但问题在于新的xaml平台及其处理反射和元数据的方式。基本上因为xaml平台是本机的,它无法访问反射来正确解析xaml。
解决这个问题的方法是使用IXamlMetadataProvider,说实话,这是一个很难实现的屁股。正常构建过程的一部分为您的应用程序创建一个,但它与xaml阅读器和您的库无法正常工作。你最终需要自己实现一个。你可以在XamlTypeInfo.g.cs中的obj / Debug文件夹中找到你的应用程序。
我的解决方案是创建一个小项目,其中包含我将要在App.xaml.cs中解析的xaml,让编译器构建上面的文件,然后将其删除以创建我自己的文件。
如果你看一下这个commit to Caliburn Micro,你可以看到我最终的结果。