WPF ResourceDictionary中StaticResource的范围是什么?

Nic*_*ebb 12 wpf .net-4.0 resourcedictionary

我有一个带有以下TextBlock的WPF ResourceDictionary:

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis}}">
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

ResourceDictionary包含在MergedDictionaries下的App.xaml中:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MyResourceDictionary.xaml"/>
Run Code Online (Sandbox Code Playgroud)

在App.xaml中,我定义了BoolToVis转换器(再次,在下Application.Resources)

<BooleanToVisibilityConverter x:Key="BoolToVis" />
Run Code Online (Sandbox Code Playgroud)

当我启动我的应用程序时 - 我得到以下XamlParseException:

"在'System.Windows.Markup.StaticResourceHolder'上提供价值引发了异常."

InnerException是:

"找不到名为'BoolToVis'的资源.资源名称区分大小写."

我可以直接用App.xaml引用这个转换器(事实上,特定的XAML声明是相同的),并且在其他UserControl中没有问题.

这个特殊的代码在.NET 4.0 RC(和Beta2)下运行良好.仅当我升级到.NET 4.0 RTM时才会发生此错误.

我可以通过BooleanToVisibilityConverter在MyResourceDictionary.xaml中声明另一个并且像这样引用它来解决它:

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis2}}">
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

有什么理由我需要这样做吗?

Dav*_*vid 8

每个MSDN:

合并字典中的资源占用资源查找范围中的位置,该位置恰好位于它们合并到的主资源字典的范围之后.

合并的ResourceDictionary无法看到App.xaml中定义的资源.我认为在ResourceDictionary本身中定义ResourceDictionary中使用的转换器或者包含所有转换器的另一个ResourceDictionary更有意义.