2010-04-20 3 views
12

У меня есть WPF ResourceDictionary со следующим TextBlock:Какова область применения StaticResource в WPF ResourceDictionary?

<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" /> 

Когда я начинаю мое приложение вверх - я получаю следующее XamlParseExcep Тион:

"Обеспечить значение на 'System.Windows.Markup.StaticResourceHolder' бросил исключение."

InnerException является:

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

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

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

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

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

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

ответ

8

Per MSDN:

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

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

+1

Мы, вероятно, займем второй маршрут. Что такое bizzare, так это то, что этот код отлично работает в RC, но не RTM. Наша команда разработчиков «смешанна» в отношении того, кто имеет какую версию. Будучи ранним усыновителем, я нарисовал короткую соломинку :). Спасибо! –

Смежные вопросы