2010-07-30 66 views
8

我需要将代码隐藏在资源字典的类后面,如this question中所述。 (我知道这是不是一个好的做法,但它应该工作的基础上对链接的问题的意见).I'm引用与X代码:Class属性:xClassNotDerivedFromElement将代码隐藏添加到资源字典中时出现错误silverlight

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> 

CODE:

using System.Windows; 

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

     //... 
    } 
} 

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

分析器内部错误:对象作家“xCla ssNotDerivedFromElement'。 System.Windows.Application.LoadComponent上的[Line:xxx Position:xxx]。

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

+0

从代码中删除调用代码,但删除构造函数,并从Xaml中删除所有资源,留下空的资源字典。你还有错误吗? (BTW“StandardResources”的构造函数名称是一个错字吗?) – AnthonyWJones 2010-07-30 14:06:03

+0

错误更正。我仍然使用空类和空的XAML资源字典出现错误。 – PanJanek 2010-08-02 08:19:59

回答

6

您是否尝试将此ResourceDictionary用作合并字典的源值?如果是这样,那不支持。你会得到那个xClassNotDerivedFromElement错误,这是一种奇怪的方式来表示它,但是这是为什么:Source属性值的获取方式是将XAML引用为XAML,而不是类。 XAML解析器将XAML作为纯粹的加载操作打开,没有任何预编译的好处,并且当时无法调和x:Class。

5

x:Class仅限于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> 
+0

谢谢!绝对的黄金见解! – 2015-02-13 10:10:17

0

可惜的是,在创建的代码隐藏的资源字典,现在意味着你不能创建使用URI到XAML ResourceDictionary中。

我打消了我的代码隐藏了,但依然采用了答案从这个question+and+answer

基本上它只是创建一个空的ResourceDictionary并在代码中设置其Source到XAML的URI创建资源字典中的代码。

对我来说,这样做效果更好,因为这意味着任何其他人仍然可以参考资源字典,如果他们想要的话,并以'预期'的方式来做。

相关问题