1

clr-namespace:指定されassembly=たトークンを持つコントロールの場合、XamlReader は指定されたアセンブリでその型を検索するだけであることを私は知っています。

しかし、既定の名前空間の既定の WPF コントロールについてはxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"どうでしょうか。

XElement ツリー内の各要素のTypeを取得しようとしていますが、アセンブリが指定されていない場合に取得する方法がわかりません。

たとえば、次の例はすべて null を返します。

  • Type.GetType("Grid")
  • typeof(Control).Assembly.GetType("Grid")
  • Assembly.GetAssembly(typeof(Control)).GetType("Grid")

ヘルプ?

4

1 に答える 1

4

の動作を複製するために、 を使用して型のルックアップを実行XamlReaderできます。XamlSchemaContext詳細については、MSDNの「既定の XAML スキーマ コンテキスト」および「WPF XAML スキーマ コンテキスト」を参照してください。

このGetXamlTypeメソッドを使用すると、Xaml 名前空間と型名を渡すことができます。

var context = new XamlSchemaContext();
var xtype = context.GetXamlType(new XamlTypeName("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "Grid"));
var gridType = xtype.UnderlyingType;
// gridType == typeof(System.Windows.Controls.Grid)

この手法は、名前空間がある場合にも機能することに注意してください。これにより、Xaml リソースを解析するための単一の統一されたメカニズムを持つことができます。

于 2015-02-20T22:55:42.680 に答える