这
可扩展应用程序标记语言
System.ComponentModel.Container
.
可扩展应用程序标记语言
XamlType
类型,包括
,
XamlProperties
.NET
类型系统(即“反射”)。
可扩展应用程序标记语言
虽然其中一些与
System.ComponentModel
XamlSchemaContext
GetXamlType
XamlType
XamlType
LookupAttachableMember
或
LookupAllAttachableMembers
XamlType
XamlType.LookupInvoker(...)
CreateInstance(...)
XamlTypeInvoker.CreateInstance
可以完全替换一些或所有XAML解析的CLR类型,但这开始违背更大的目的,因为任何这样的“替换”CLR类型——就像由实例化的所有CLR类型一样
做
--但你当然可以通过这个覆盖来添加!--是使用反射
TypeBuilder
Type
这意味着没有办法得到
XamlType
或
Xaml会员
可扩展应用程序标记语言
类型系统下的派生
可扩展应用程序标记语言
.
可扩展应用程序标记语言
XamlXmlReader
和
(对于所谓的“加载路径”场景;我在这里不会讨论“保存路径”)。然而,更重要的是,您也可以重写这两个类,它们提供了一组丰富的虚拟方法来重写。作为伪代码示例(摘自我的工作代码),您可以添加
transform(...)
方法到你的
XamlXmlReader
object
// ...in your class derived from 'XamlXmlReader'
public void transform(my_xaml_obj_writer xow)
{
while (base.Read())
{
if (xow.ShouldProvideLineInfo)
xow.SetLineInfo(LineNumber, LinePosition);
switch (NodeType)
{
case XamlNodeType.NamespaceDeclaration:
xow.WriteNamespace(base.Namespace);
break;
case XamlNodeType.StartObject:
xow.WriteStartObject(base.Type);
break;
case XamlNodeType.EndObject:
xow.inject_ctor_arg(); // <--- !! (not shown)
xow.WriteEndObject();
break;
case XamlNodeType.StartMember:
xow.inject_ctor_arg(); // <--- !! (not shown)
xow.WriteStartMember(base.Member);
break;
case XamlNodeType.EndMember:
xow.WriteEndMember();
break;
case XamlNodeType.GetObject:
xow.WriteGetObject();
break;
case XamlNodeType.Value:
xow.WriteValue(base.Value);
break;
case XamlNodeType.None:
break;
}
}
}
可扩展应用程序标记语言
对内存中的CLR对象执行以下操作:
void XamlToObject(FileStream fs, my_xaml_schema_context ctx)
{
using (var xxr = new xaml_xml_reader(fs, ctx))
using (var xow = new my_obj_writer(this))
{
try
{
xxr.transform(xow);
}
catch (XamlObjectWriterException xex)
{
// ...
}
}
}
Result
XamlObjectWriter
在这个过程结束时。在我的例子中,我实际上是在XAML节点流的早期阶段窥探结果对象
transform
[UsableDuringInitialization]
和
XamlXmlReader设置