gpt4 book ai didi

wpf - 调用 XamlReader.Load 时抛出 XamlParseException

转载 作者:行者123 更新时间:2023-12-04 16:01:53 26 4
gpt4 key购买 nike

我正在玩 .net 4 System.Windows.Markup.XamlReader - 就像一个教育练习 - 我一直遇到同样的问题:用 XamlReader.Load 加载 xaml抛出一个 XamlParseException如果根对象定义了 x:Class ,但如果没有,则成功解析并加载节点。

这是我正在尝试的代码:

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...
}
}
}

我试过 XamlReader.Parse直接从保存 xaml 的字符串获得相同的结果:仅在未定义 x:Class 声明时才有效。

删除 x:Class声明似乎不是一个好的选择,因为那样我就会丢失代码隐藏,特别是对 InitalizeComponent() 的调用。

异常详情:
'Specified class name 'WpfApplication2.UserControl1' doesn't match actual root instance type 'System.Windows.Controls.UserControl'. Remove the Class directive or provide an instance via XamlObjectWriterSettings.RootObjectInstance.'
...但我不知道如何(在哪里)设置 XamlObjectWriterSettings.RootObjectInstance (或者确实,如果需要的话?)

有什么线索吗?

最佳答案

XamlReader 是解析器,而不是编译器,因此不支持代码隐藏。如果您需要将代码与动态加载的 XAML 相关联,您可以执行一些操作,例如将其包装到在其他地方定义的控件中,您可以使用 XAML 中的实例,或者在读取 XAML 后连接代码(即事件处理程序) 到结果对象中的元素。

关于wpf - 调用 XamlReader.Load 时抛出 XamlParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com