2

我有自定義控件「CustomControl」,其中定義了自定義附加屬性「CustomAttachedProperty」。控制工作正常,如下因素XAML渲染,因爲它假設是:當我嘗試通過XamlReader.Load加載相同的XAML(可)Windows 8,XamlReader無法加載帶有自定義附加屬性的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能夠正確加載字符串。

XamlReader.Load在定義了CustomControl的相同程序集中調用。

任何人有想法是什麼錯?

回答

1

我不能給出完整的答案,但問題出在新的xaml平臺以及它處理反射和元數據的方式。基本上,因爲xaml平臺是原生的,所以它無法正確解析xaml。

解決這個問題的方法是使用IXamlMetadataProvider,說實話,這是一個痛苦的屁股實施。正常的構建過程的一部分會爲您的應用程序創建一個,但它不適用於xaml閱讀器和您的庫。你最終需要自己實現一個。您可以在XamlTypeInfo.g.cs中的obj/Debug文件夾中找到適用於您的應用程序的應用程序。

我的解決方案是創建一個小型項目,該項目具有我將在App.xaml.cs中解析的xaml,讓編譯器構建上述文件,然後將其解壓出來創建自己的。

如果你看看這個commit to Caliburn Micro你可以看到我結束了。

+0

非常感謝Nigel,我會檢查建議的代碼,看它是否對我有用。 – Andris