Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > как наследовать глобальный стиль локально?


Автор: lankin 1.12.2011, 15:56
есть сборка Project.Style, в которой только один файл CommonStyle.xaml. В нем описаны все стили для контролов. Например:
Код

    <Style TargetType="TextBlock">
        <Setter Property="Height" Value="26"/>
    </Style>

есть сам проект Project, в app.xaml которого есть следующие строки:
Код

<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Project.Style;component/CommonStyle.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>


есть отдельный MainView.xaml, в котором есть такие строки
Код

<Grid.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
</Grid.Resources>


Что в итоге: к текстблоку на MainView применяется только стиль, описанный тут же, локально. Стиль, который описан в отдельной сборке - не применяется, высота стандартная. Если убрать локальный стиль - тогда применяется и высота становится = 26рх.
Почему??? и как сделать, чтобы стили наследовались? Можно ли сделать basedOn для стиля, который MergedDictionary из другой сборки?

Автор: Kefir 2.12.2011, 13:29
Чтобы унаследовать стиль по умолчанию надо просто написать так:
Код

<Grid.Resources>
    <Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}">
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
</Grid.Resources>


То биш надо добавить BasedOn="{StaticResource {x:Type TextBlock}}"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)