Wpf 调用XamlReader.Load时引发XamlParseException
我在玩.net 4的Wpf 调用XamlReader.Load时引发XamlParseException,wpf,xaml,.net-4.0,Wpf,Xaml,.net 4.0,我在玩.net 4的System.Windows.Markup.XamlReader——这只是一个教育练习——我一直遇到同样的问题:如果根对象定义了x:Class,则加载带有XamlReader.Load的xaml会引发XamlParseException,但如果没有,则成功解析并加载节点 以下是我正在尝试的代码: using System.Windows; using System.Xaml; using XamlReader = System.Windows.Markup.XamlReade
System.Windows.Markup.XamlReader
——这只是一个教育练习——我一直遇到同样的问题:如果根对象定义了x:Class
,则加载带有XamlReader.Load
的xaml会引发XamlParseException
,但如果没有,则成功解析并加载节点
以下是我正在尝试的代码:
using System.Windows;
using System.Xaml;
using XamlReader = System.Windows.Markup.XamlReader;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Load up UserControl1.xaml from the solution
var reader = new XamlXmlReader(@"../../UserControl1.xaml", XamlReader.GetWpfSchemaContext());
var userControl = XamlReader.Load(reader) as UserControl1;
// Do something with userControl...
}
}
}
使用System.Windows;
使用System.Xaml;
使用XamlReader=System.Windows.Markup.XamlReader;
命名空间WpfApplication2
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
//从解决方案中加载UserControl1.xaml
var reader=new-XamlXmlReader(@“../../UserControl1.xaml”,XamlReader.GetWpfSchemaContext());
var userControl=XamlReader.Load(reader)为UserControl1;
//使用userControl执行某些操作。。。
}
}
}
我尝试了直接从包含xaml的字符串中解析XamlReader.Parse
,结果相同:仅在未定义x:Class声明的情况下有效
删除x:Class
声明似乎不是一个好的选择,因为这样我就丢失了后面的代码,特别是调用initializeComponent()
例外详细信息:
“指定的类名”WpfApplication2.UserControl1“与实际根实例类型“System.Windows.Controls.UserControl”不匹配。删除Class指令或通过XamlObjectWriterSettings.RootObjectInstance提供实例。“
…但我不知道如何(在哪里)设置XamlObjectWriterSettings.RootObjectInstance
(或者,如果需要的话?)
有什么线索吗?XamlReader是解析器,而不是编译器,因此不支持代码隐藏。如果您需要将代码与动态加载的XAML关联,您可以做一些事情,比如将其包装到其他地方定义的控件中,您可以使用XAML中的实例,或者在读取XAML后,将代码(即事件处理程序)连接到结果对象中的元素。您不能在动态XAML中使用x:Class。相反,您可以做的是在加载XAML之后钩住事件。请看一下这个链接