我知道对于具有指定clr-namespace:
和assembly=
标记的控件,XamlReader只会在指定的程序集中查找该类型。
但是默认名称空间xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
中的默认WPF控件呢?
我正在尝试获取XElement树中每个元素的类型,但是当不指定程序集时我不知道如何找到它?
例如,以下所有示例均返回null:Type.GetType("Grid")
typeof(Control).Assembly.GetType("Grid")
Assembly.GetAssembly(typeof(Control)).GetType("Grid")
救命?
最佳答案
要复制XamlReader
的行为,可以使用XamlSchemaContext
进行类型的查找。有关详细信息,请参阅MSDN上的Default XAML Schema Context and WPF XAML Schema Context。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资源。
关于c# - XamlReader.Read或XamlReader.Parse如何实例化类型以构建wpf树?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28639563/