应该可以在 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>
我做错了什么?
亲切的问候,
罗纳德·维尔登伯格
最佳答案
Silverlight 不支持仅在 WPF 中支持的 x:ClassModifier。
此外,x:Class 在资源字典中无效。当然,当尝试将资源字典中的 Xaml 作为合并字典包含时,Silverlight 将不知道此时如何处理 x:Class。
实际上,上面的内容严格来说并不正确 x:Class 是有效的,但是您将字典包含在应用程序字典中的方式需要调整。首先我要声明的是,这里假设您实际上需要对 ResourceDictionary 进行子类化(如果不只是删除 x:Class)。
基于您包含的 x:ClassModifier,我也将采取冒险行动,因为您的项目中实际上没有 ProvisiorResourceDictionary.xaml.cs
文件。由于 SL 总是创建一个公共(public)部分,因此您需要此文件至少包含:-
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 的实例。
关于silverlight - 在 Silverlight 资源字典后面添加代码时出错 : AG_E_PARSER_BAD_TYPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728015/