假设我有一个描述窗口的XAML字符串,其中包含一个带有自定义附加行为的TextBox:
<Window x:Class="System.Windows.Window" >
<Grid>
<TextBox behaviors:TextBoxCursorPositionBehavior.TrackCaretIndex="True"/>
</Grid>
</Window>
我想在运行时解析它,并实例化它描述的窗口。 目前,我正在做:
System.Windows.Markup.ParserContext parserContext = new System.Windows.Markup.ParserContext();
parserContext.XmlnsDictionary.Add( "", "http://schemas.microsoft.com/winfx/2006/xaml/presentation" );
parserContext.XmlnsDictionary.Add( "x", "http://schemas.microsoft.com/winfx/2006/xaml" );
parserContext.XmlnsDictionary.Add("behaviors", "clr-namespace:;assembly=" + typeof(TextBoxCursorPositionBehavior).Assembly.FullName);
var window = (System.Windows.Window)XamlReader.Load(sr, parserContext);
window.ShowDialog();
原则上有效。 但是,在我的环境中,我需要控制XAML在实例化窗口时如何尝试查找相应的CLR类型。
具体来说,我的程序集中的&#34; TextBoxCursorPositionBehavior&#34; -class实际命名为&#34;提交#0 + TextBoxCursorPositionBehavior&#34;在已编译的程序集中,因为它是作为Roslyn脚本的一部分创建的(请参阅WPF/XAML: How to reference class that is not defined within any namespace)。
现在&#34;提交#0 + TextBoxCursorPositionBehavior&#34;是XAML文件的格式无效,因此我无法在XAML中直接使用它。
我能想到如何潜在解决我的问题的唯一方法是,如果我可以控制自己的类型解决。即当XamlReader(或任何其他类,如果有替代方案?)试图找到对应于&#34; behavior:TextBoxCursorPositionBehavior&#34;的CLR类型时,我需要截取该步骤并返回正确的类型。
有没有办法做到这一点?
到目前为止,我只找到了XamlTypeMapper(通过ParserContext传递),但似乎只能用于控制解析命名空间。