Scope of StaticResource within a WPF ResourceDictionary

Posted by Nicolas Webb on Stack Overflow See other posts from Stack Overflow or by Nicolas Webb
Published on 2010-04-20T21:44:21Z Indexed on 2010/04/20 21:53 UTC
Read the original article Hit count: 1148

Filed under:
|
|

I have a WPF ResourceDictionary with the following TextBlock:

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis}}">
</TextBlock>

The ResourceDictionary is included in App.xaml under MergedDictionaries:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MyResourceDictionary.xaml"/>

Within the App.xaml I have defined the BoolToVis converter (again, under Application.Resources)

<BooleanToVisibilityConverter x:Key="BoolToVis" />

When I start my app up - I get the following XamlParseException:

"Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception."

The InnerException is:

"Cannot find resource named 'BoolToVis'. Resource names are case sensitive."

I'm able to refer to this converter directly with App.xaml (in fact, it's another TextBlock) and within other UserControls with no problems.

This particular bit of code also worked fine under the .NET 4.0 RC (and Beta2). This error only started happening when I upgraded to the .NET 4.0 RTM.

I'm able to work around it by declaring another BooleanToVisibilityConverter within MyResourceDictionary.xaml and referring to it like so:

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis2}}">
</TextBlock>

Any reason why I should need to do this?

© Stack Overflow or respective owner

Related posts about wpf

Related posts about .net-4.0