为Silverlight资源字典添加代码时出错:AG_E_PARSER_BAD_TYPE

时间:2009-11-13 08:58:31

标签: silverlight xaml silverlight-3.0

应该可以在Silverlight中为资源字典添加代码隐藏文件,但是我仍然从InitializeComponent构造函数的App.xaml方法中得到同样的错误:{{1} }:XamlParseException

资源字典xaml文件如下所示:

AG_E_PARSER_BAD_TYPE

如果我删除<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

我做错了什么?

亲切的问候,

罗纳德威尔登伯格

2 个答案:

答案 0 :(得分: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:Class。

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

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

您现在不需要尝试通过Source属性将XAML文件作为资源导入,而是包含专用ResourceDictionary的实例。

答案 1 :(得分:0)

ProvisiorResourceDictionary课程是公开的吗?如果没有,也许您还需要指定the x:ClassModifier属性。