2011-01-10 3 views
3

Приложение, в котором я работаю, имеет 2 ResourceDictionary, DefaultStyles.xaml и CustomStyles.xaml.Использование свойства BasedOn со стилем, определенным в другом словаре

Возможно ли, что стиль в словаре CustomStyles использует базовый стиль, определенный в другом словаре?

DefaultStyles.xaml:

<Style x:Key="TextBlockDefaultStyle" TargetType="TextBlock"> 
    <Setter Property="Margin" Value="4" /> 
</Style> 

CustomStyles.xaml:

<Style x:Key="SectionTitleStyle" TargetType="TextBlock" BasedOn="{StaticResource TextBlockDefaultStyle}"> 
    <Setter Property="FontSize" Value="16" /> 
</Style> 

App.xaml:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Assets/Styles/DefaultStyles.xaml"/> 
      <ResourceDictionary Source="Assets/Styles/CustomStyles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Когда С ode запускается следующее исключение:

Не удается найти ресурс с именем/ключом TextBlockDefaultStyle.

Это хорошо работает, если оба стиля находятся в одном файле.

ответ

6

Вам необходимо напрямую ссылаться на словарь с другим стилем.

CustomStyles.xaml:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="DefaultStyles.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

<Style x:Key="SectionTitleStyle" TargetType="TextBlock" BasedOn="{StaticResource TextBlockDefaultStyle}"> 
    <Setter Property="FontSize" Value="16" /> 
</Style> 
+2

Такое поведение reasonable.But я просто была другая проблема: BasedOn = "{StaticResource {х: Кнопка Тип}}" не работал, пока я не изменил его вместо ключа указывается ключ. Это похоже на ошибку во время выполнения WPF. – alehro

+1

Замечание Пер @ alehro, я работал над проблемой, переместив '