我使用Systeml.Xaml創建基於XAML的自定義佈局引擎。由於它是跨平臺的,95%的類型在便攜類庫中定義,所以不可能使用XmlnsDefinitionAttribute來「裝飾」默認程序集。XamlObjectWriter和命名空間通過配置(不能使用XmlnsDefinitionAttribute)
我想使用XamlReader來讀取我的XAML格式的文件。問題是我的對象屬於幾個名稱空間。目前,如果我想XamlReader能夠實例化每一個,我必須指定從命名空間的每個對象是這樣的:
<Window Title="Title" xmlns="clr-namespace:Perspex.Win32;assembly=Perspex.Win32"
xmlns:r="clr-namespace:Perspex;assembly=Perspex.Base">
<Window.Content>
<TextBlock xmlns="clr-namespace:Perspex.Controls;assembly=Perspex.Controls" Text="{r:Binding}" />
</Window.Content>
</Window>
我怎樣才能讓XamlReader有一組默認命名那是隱含的,所以它們在沒有指定名稱空間的情況下被發現?
編輯:我現在的代碼是這樣的。我在XamlXmlReader中使用它來完成它。
private static object Load(XmlReader reader)
{
XamlXmlReader xamlXmlReader = new XamlXmlReader(reader, xamlSchemaContext);
XamlObjectWriter writer = new XamlObjectWriter(
xamlSchemaContext,
new XamlObjectWriterSettings
{
XamlSetValueHandler = SetValue,
});
while (xamlXmlReader.Read())
{
writer.WriteNode(xamlXmlReader);
}
object result = writer.Result;
return result;
}
正如你所看到的,我試着用一些默認組件一個XamlSchemaContext,但它不工作:(
如何使用[XamlReader.Load](http://msdn.microsoft.com/zh-cn/library/ms590393(v = vs.110).aspx)使用ParserContext參數的重載,該參數具有[XmlnsDictionary](http://msdn.microsoft.com/zh-cn/library/system.windows.markup.parsercontext.xm lnsdictionary(v = vs.110).aspx)屬性? – Clemens 2014-12-01 21:40:26
對不起,我忘了說:我正在使用XamlXmlReader。看看編輯過的問題。我將發佈我現有的代碼。感謝你的回答! – SuperJMN 2014-12-01 21:52:13
@Clemens似乎它在過去像那樣工作。 XmlnsDictionary是不再適用於.NET 4.0和更新版本的ParserContext的一部分。像XamlObjectWriter這樣的對象會得到一個XamlSchemaContext :(不幸的是,這個文檔並沒有提供太多關於它的信息 – SuperJMN 2014-12-02 12:08:12