У меня есть 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>
Какая-либо причина, почему я должен должен быть сделать это?
Согласно MSDN :
Ресурсы в объединенном словаре занимают место в области поиска ресурсов, которое находится сразу после области действия основного словаря ресурсов, в который они объединены.
Ресурсы, определенные в App.xaml, не могут быть просмотрены объединенным ResourceDictionary. Я бы подумал, что имеет смысл определить конвертер, используемый в ResourceDictionary, в самом ResourceDictionary или другом ResourceDictionary, в котором находятся все ваши конвертеры.