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


Автор: lankin 1.12.2011, 15:54
есть сборка 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 из другой сборки?

Автор: Gvozdin 1.12.2011, 16:10
Попробуйте BasedOn={StaticResource {x:Type TextBlock}}"
Но у меня сомнения что заработает

Автор: lankin 2.12.2011, 06:29
все, вопрос решен. Для нужного стиля в отдельной сборке присваиваем x:Key и в локальном стиле пишем 
 BasedOn={StaticResource имя_стиля_из_сборки}"

Забыл указать - это SL приложение, не WPF. поэтому решение BasedOn={StaticResource {x:Type TextBlock}}" не работает.

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