代码之家  ›  专栏  ›  技术社区  ›  PanJanek

在silverlight中将代码添加到资源字典时发生xClassNotDerivedFromElement错误

  •  8
  • PanJanek  · 技术社区  · 14 年前

    我需要将代码隐藏类添加到资源字典中,如中所述 this question . (我知道这不是一个好的做法,但它应该根据链接问题的注释来工作)。我正在引用带有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();
            }
    
            //...
        }
    }
    

    这将导致运行时分析器异常:

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

    这些资源包含在App.xaml中,带有ResourceDictionary.MergedDictionaries标记。

    3 回复  |  直到 7 年前
        1
  •  6
  •   Wolf Schmidt-MSFT    14 年前

    您正在尝试将此ResourceDictionary用作合并词典的源值吗?如果是这样,那就不支持了。您会得到xClassNotDerivedFromElement错误,这是一种奇怪的表示方法,但原因是:源属性值的转换方式将XAML引用为XAML,而不是类。XAML解析器将XAML作为纯加载操作打开,没有任何预编译的好处,并且当时无法协调x:类。

        2
  •  5
  •   Pavel Korsukov    12 年前

    类对于App.xaml中的合并词典是有限制的。相反,您应该使用定义为代码隐藏的应用程序内资源的类:

    <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>
    
        3
  •  0
  •   Community Ian Goodfellow    7 年前

    question+and+answer

    基本上它只是创建一个空的 ResourceDictionary Source 到代码中的xamluri。

    对我来说,这样做效果更好,因为这意味着如果其他人愿意,他们仍然可以引用资源字典,并以“预期”的方式进行。