在Silverlight中将代码绑定到资源字典时出现xClassNotDerivedFromElement错误

8

我需要按照这个问题中的描述,将代码后置类添加到资源字典中。(我知道这不是一个好的实践方法,但根据链接问题的评论,它应该能够工作)。我使用x:Class属性引用代码:

XAML(单独的资源字典文件):

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MyNamespace.MyStandardResources">
    ...
</ResourceDictionary>

代码:

using System.Windows;

namespace MyNamespace
{
    public partial class MyStandardResources : ResourceDictionary
    {
        public MyStandardResources()
        {
            InitializeComponent();
        }

        //...
    }
}

这会导致运行时解析器异常:

解析器内部错误:对象编写器 'xClassNotDerivedFromElement'。[行:xxx 位置:xxx],位于 System.Windows.Application.LoadComponent。

这些资源包含在 App.xaml 中,使用 ResourceDictionary.MergedDictionaries 标签。


从代码中删除调用代码和构造函数,并从Xaml中删除所有资源,只留下一个空的资源字典。您还会收到错误吗?(顺便说一句,“StandardResources”构造函数名称是错别字,对吧?) - AnthonyWJones
错别字已经更正。我仍然在使用空类和空的XAML资源字典时遇到错误。 - PanJanek
3个回答

6

您是否尝试将此ResourceDictionary用作合并字典的Source值?如果是,那是不支持的。您会收到xClassNotDerivedFromElement错误,这是一种奇怪的指示方式,但原因在于:Source属性值被转换为引用XAML而不是类的方式。 XAML解析器以纯加载操作的方式打开该XAML,没有任何预编译的好处,并且无法在此时调和x:Class。


5
标签在App.xaml中合并字典时受限,应该使用定义为代码后台的类作为App资源,例如:
``` ```
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         x:Class="MyNamespace.App"
         xmlns:view="clr-namespace:MyNamespace">

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <view:MyStandardResources />
                ....
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

</Application>

谢谢!绝对是非常有价值的见解! - Deani Hansen

0

很遗憾,现在为资源字典创建代码后台意味着您不能使用URI来创建ResourceDictionary。

我再次删除了我的代码后台,但仍然使用这个问题+和+答案的答案在代码中创建了ResourceDictionary。

基本上它只是创建一个空的ResourceDictionary并在代码中将其Source设置为xaml uri。

对我来说,这样做更好,因为这意味着任何其他人仍然可以引用资源字典,如果他们想要的话,并且按照“预期”的方式进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接