2013-04-26 1 views
1

В моем случае на основе параметров конфигурации линии сетки должны отображаться в разных цветах.Как наложить стиль по умолчанию на стили с помощью шаблона управления в WPF

Я определил простой стиль с TargetType из CellValuePresenter, и я заметил, что стиль применяется ко всем столбцам, кроме тех, которые также имеет стиль с целевым типом CellValuePresenter и имеют свои собственные ControlTemplate. И у меня есть много стилей с ControlTemplate s для CellValuePresenter через решение, и их невозможно изменить, чтобы быть BasedOn этот новый стиль, который я создал.

Каковы мои варианты, так что стили с ControlTemplate s пикап меняет изменения без изменения каждого из них.

ответ

2

(Un) к счастью, стили не применяются, как они это делают в CSS, так что нет никакой двусмысленности того, что вы будете в конечном итоге с в конце, где стили строить на друг друга.

Если вы создаете стиль для типа, он применяется ко всем типам в вашем стиле. Это означает, что если вы включите его наверху в ваш app.xaml, все будет затронуто, но если вы включите его только для пользовательского элемента управления или window.xaml, он применим только к этому.

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

К сожалению, я думаю, что вам придется реорганизовать, как вы обрабатываете свои стили, чтобы получить то, что вы пытаетесь достичь, и BasedOn - это путь.

2

Вы можете сделать стиль BasedOn стилем по умолчанию для этого элемента, чтобы он включал все сеттеры из неявного стиля.

Например,

<Style TargetType="{x:Type CellValuePresenter}"> 
    <!-- Generic Style Setters --> 
</Style> 

<!-- This Style will include the setters from the implicit style above --> 
<Style x:Key="CustomCellStyle" 
     TargetType="{x:Type CellValuePresenter}" 
     BasedOn="{StaticResource {x:Type CellValuePresenter}}"> 

    <Setter Property="ControlTemplate" ... /> 

</Style> 
+0

Я не могу использовать свойство BasedOn, поскольку у меня слишком много стилей с ControlTemplate, и любые будущие стили также не применяются по умолчанию. – skjagini

+0

@SujithJagini. Вы можете попробовать разместить свой неявный базовый стиль в '', поскольку эти стили обычно применяются во всем приложении независимо от границ шаблона, в отличие от стилей в '' или других '.Resources' , Я не уверен, что это будет работать для ваших сеттеров, поскольку я тестировал это только с помощью нескольких общих стилей, таких как цвет шрифта. – Rachel