2009-11-13 62 views
4

它应该是可以添加隐藏文件在Silverlight资源字典中的代码,但我不断收到同样的错误,从我App.xaml构造的InitializeComponent方法抛出:XamlParseExceptionAG_E_PARSER_BAD_TYPE错误时为Silverlight资源字典中添加代码背后:AG_E_PARSER_BAD_TYPE

资源字典XAML文件看起来是这样的:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="Celerior.Annapurna.SL.ProvisiorResourceDictionary" 
    x:ClassModifier="public"> 
    ... 
</ResourceDictionary> 

如果我删除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="Celerior.Annapurna.SL.App"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="ProvisiorResourceDictionary.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

我在做什么错?

亲切的问候,

罗纳德Wildenberg先生

回答

9

Silverlight不支持仅在WPF中支持的x:ClassModifier。

另外x:Class在资源字典中无效。当然,当试图从资源字典中包含Xaml作为合并字典时,Silverlight不知道该如何处理x:Class。

其实上面的说法并不严格x:Class是有效的,但是你在应用程序字典中包含字典的方式需要调整。首先让我说明这里有一个假设,你确实需要子类ResourceDictionary(如果不是简单地删除x:Class)。

我也打算根据你包含的x:ClassModifier而在你的项目中没有ProvisiorResourceDictionary.xaml.cs文件。由于SL总是创建一个公共部分,你需要这个文件至少包含: -

public partial class ProvisiorResourceDictionary 
{ 
    public ProvisiorResourceDictionary() 
    { 
     InitializeComponent(); 
    } 
} 

这就是说,如果没有这样的事情已经那么你可能也只是差降X:类完全。

现在你的App.xaml中需要看起来像这样: -

<Application.Resources> 
    <ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <common:ProvisiorResourceDictionary /> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

而不是试图通过Source属性你现在有专门的ResourceDictionary实例导入XAML文件作为资源。

+0

这个工程!非常感谢。我需要隐藏代码,因为我在资源字典中有一个模板,并带有一个按钮。我想在某处处理Click事件。但是,我不能离开x:Class。有必要获得类后面的代码进行编译。 – 2009-11-13 12:44:06

0

是在ProvisiorResourceDictionary类公众?如果不是,也许你需要指定the x:ClassModifier属性。

+0

是的,它是公开的... – 2009-11-13 11:12:23