Каков объем StaticResource в WPF ResourceDictionary?

У меня есть WPF ResourceDictionary со следующим TextBlock:

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

ResourceDictionary включен в App.xaml под MergedDictionaries:

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

В App.xaml я определил преобразователь BoolToVis (снова, под Application.Resources)

<BooleanToVisibilityConverter x:Key="BoolToVis" />

Когда я запускаю свое приложение - я получаю следующий XamlParseException:

"Обеспечьте значение в 'Системе. Windows. Разметка. StaticResourceHolder' выдал исключение".

InnerException:

"Не может найти ресурс под названием 'BoolToVis'. Имена ресурса чувствительны к регистру".

Я могу обратиться к этому преобразователю непосредственно с App.xaml (на самом деле, конкретное объявление XAML идентично), и в другом UserControls без проблем.

Этот конкретный бит кода также хорошо работал под.NET 4,0 RC (и Beta2). Эта ошибка только начала происходить, когда я обновил до.NET 4.0 RTM.

Я могу работать вокруг этого путем объявления другого BooleanToVisibilityConverter в MyResourceDictionary.xaml и относящийся к нему как так:

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

Какая-либо причина, почему я должен должен быть сделать это?

12
задан Nicolas Webb 20 April 2010 в 21:59
поделиться

1 ответ

Согласно MSDN :

Ресурсы в объединенном словаре занимают место в области поиска ресурсов, которое находится сразу после области действия основного словаря ресурсов, в который они объединены.

Ресурсы, определенные в App.xaml, не могут быть просмотрены объединенным ResourceDictionary. Я бы подумал, что имеет смысл определить конвертер, используемый в ResourceDictionary, в самом ResourceDictionary или другом ResourceDictionary, в котором находятся все ваши конвертеры.

8
ответ дан 2 December 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: