我知道对于具有指定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/

10-13 03:14