合并字典和本地资源

19

我有一个Styles.xaml文件,其中包含许多ResourceDictionary,这些ResourceDictionary被分组放在MergedDictionary中。

我在我的UserControl.Resources中引入了Styles.xaml。

<UserControl.Resources>
    <ResourceDictionary Source="Dictionaries\Styles.xaml" />
</UserControl.Resources>

但是当我尝试添加一个转换器时

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionaries\Styles.xaml" /> <--! Exception -->
        </ResourceDictionary.MergedDictionaries>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </ResourceDictionary>
</UserControl.Resources>

它引发异常:参数不能为空。
参数名:item

将转换器包装在另一个MergedDictionary中没有效果。
我该如何解决?
谢谢大家!


已解决

最终,我找到了问题所在:异常是在一个.xaml文件中引发的,但Visual Studio没有提供足够的信息来定位错误的行。
以下代码可以解决问题。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionaries\Styles.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </ResourceDictionary>
</UserControl.Resources>

在进行编辑之前,它应该与您之前的实现方式兼容。你能分享一下你的style.xaml文件吗? - Nitin
1
是的,第二段代码应该没问题(可能是你的Styles.xaml本身有问题),但如果你想使用第三段代码,你需要在mergeddirectory标签中添加第二个ResourceDictionary。 - dnr3
谢谢@dnr3,你的评论解决了问题。在样式字典的层次结构中有一个样式出了问题,所以Styles.xaml也有问题,一切都不起作用了。现在已经修复好了,感谢大家。 - Sergio
你应该发布你的答案,如果你遇到了同样的问题并且现在它已经解决了。 - IssamTP
1个回答

20

试试这个

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/PROJECTNAMESPACE (TestProject.Something);component/Dictionaries/Styles.xaml" /> 
        </ResourceDictionary.MergedDictionaries>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </ResourceDictionary>
</UserControl.Resources>

较长的那一行仍然出现同样的错误:值不能为空。这不是资源找不到的问题,因为如果我更改了某些内容,它会说无法解析该资源,必须是其他问题。我认为。 - Sergio
你能提供调用堆栈吗? - 123 456 789 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接