首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用XamlReader.Load时抛出XamlParseException

调用XamlReader.Load时抛出XamlParseException
EN

Stack Overflow用户
提问于 2011-03-05 13:36:38
回答 2查看 7.9K关注 0票数 3

我正在尝试xaml 4的System.Windows.Markup.XamlReader -只是作为一个教育练习-我一直遇到相同的问题:如果根对象定义了XamlParseException,则用XamlReader.Load加载x:Class会抛出XamlParseException,但如果根对象定义了x:Class,则会成功解析并加载节点。

下面是我正在尝试的代码:

代码语言:javascript
复制
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...
        }
    }
}

我尝试了直接从包含xaml的字符串执行XamlReader.Parse,结果相同:只有在没有定义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.'

...but我不知道如何(在哪里)设置XamlObjectWriterSettings.RootObjectInstance (或者实际上,如果需要的话?)

有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-05 14:02:00

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

票数 6
EN

Stack Overflow用户

发布于 2011-03-05 14:23:53

不能在动态XAML中使用x:Class。相反,您可以在加载XAML之后挂接事件。请看一下这个链接

Loading XAML XML through runtime?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5201937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档