Использование свойства BasedOn со стилем, определенным в другом словаре - PullRequest
4 голосов
/ 10 января 2011

Приложение, над которым я работаю, имеет 2 ResourceDictionary, DefaultStyles.xaml и CustomStyles.xaml.

Возможно ли, что стиль в словаре 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>

При выполнении кода выдается следующее исключение:

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

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

1 Ответ

7 голосов
/ 10 января 2011

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

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>
...