添加Silverlight样式和ResourceDictionary时出现XamlParseException

时间:2012-12-13 16:33:46

标签: silverlight resources resourcedictionary

我在将控件特定资源(特别是Style)添加到已定义合并ResourceDictionary的控件时遇到问题。如果重要,我的XAML文件位于我正在工作的主项目的子文件夹中。

我开始时:

<controls:ChildWindow.Resources>

    <Style x:Key="ParmatersText" TargetType="TextBlock">
        <Setter Property="Margin" Value="5,5"/>
    </Style>

</controls:ChildWindow.Resources>

但是当我添加它时遇到了问题:

<controls:ChildWindow.Resources>

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="my.foo.bar;component/MyResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

    <Style x:Key="ParmatersText" TargetType="TextBlock">
        <Setter Property="Margin" Value="5,5"/>
    </Style>

</controls:ChildWindow.Resources>

错误消息为The designer does not support loading dictionaries that mix 'ResourceDictionary' items without a key and other items in the same collection.

SO Question评分最高的答案告诉我尝试以下操作,这会改变</ResourceDictionary>标记的位置。这个other SO question以及答案的链接支持了这种方法。

<controls:ChildWindow.Resources>

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="my.foo.bar;component/MyResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>

    <Style x:Key="ParmatersText" TargetType="TextBlock">
        <Setter Property="Margin" Value="5,5"/>
    </Style>

    </ResourceDictionary>
</controls:ChildWindow.Resources>

然而,由于XamlParseException导致Failed to assign to property 'System.Windows.ResourceDictionary.Source'

的效果失败

从同样的问题,我尝试了明确的答案,这给了我这个:

<controls:ChildWindow.Resources>

    <ResourceDictionary x:Key="MyDictionary">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="my.foo.bar;component/MyResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

    <Style x:Key="ParmatersText" TargetType="TextBlock">
        <Setter Property="Margin" Value="5,5"/>
    </Style>

</controls:ChildWindow.Resources>

然而,与之前相同的XamlParseException失败了。

XAML ResourcesMerged Resource Dictionaries上的这两篇MSDN文章帮助我理解了页面所隐含的ResourceDictionary,我显然是通过在隐式字典中定义资源来创建冲突以及指定的合并。

我的问题是上面的语法不起作用,我正在拿起XamlParseExceptions。

1 个答案:

答案 0 :(得分:0)

所以我终于找到了问题的解决方案,我认为部分原因是由于我的文件位于子文件夹中。

在子窗口的声明中,我添加了以下命名空间:

<controls:ChildWindow xmlns:local="clr-namespace:my.foo.bar" >

并且参考资料部分的正确语法是:

<controls:ChildWindow.Resources>

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MyResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>

    <Style x:Key="ParmatersText" TargetType="TextBlock">
        <Setter Property="Margin" Value="5,5"/>
    </Style>

    </ResourceDictionary>

</controls:ChildWindow.Resources>

这非常接近来自链接的SO问题的答案,但在命名空间的元素中添加以识别资源文件。