代码之家  ›  专栏  ›  技术社区  ›  Ronald Wildenberg

为Silverlight资源字典添加代码时出错:Ag_e_Parser_Bad_类型

  •  4
  • Ronald Wildenberg  · 技术社区  · 16 年前

    应该可以为Silverlight中的资源字典添加代码隐藏文件,但我始终会得到相同的错误,从 InitializeComponent 我的方法 App.xaml 构造函数: XamlParseException : 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>
    

    我做错什么了?

    亲切的问候,

    罗纳德·维登伯格

    2 回复  |  直到 16 年前
        1
  •  9
  •   AnthonyWJones    16 年前

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

    此外,x:class在资源字典中无效。当然,当尝试将来自资源字典的XAML作为合并字典包含时,Silverlight将不知道在此时如何处理x:类。

    实际上,上面的x:class并不是完全正确的,但是在应用程序字典中包含字典的方式需要调整。让我先声明这里有一个假设,您实际上需要子类资源字典(如果不只是删除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属性将XAML文件作为资源导入,而是包含一个专门的resourceDictionary实例。

        2
  •  0
  •   Konamiman    16 年前

    ProvisiorResourceDictionary 阶级大众?如果没有,也许您需要指定 the x:ClassModifier 属性也是。

    推荐文章