Применение тем к шаблону элемента управления - PullRequest
0 голосов
/ 18 мая 2011

По сути, моя проблема заключается в том, что я изменяю шаблон элемента управления на ComboBox, чтобы он выглядел так, как я хочу. Кроме того, весь наш проект использует тему ExpressionDark. Проблема в том, что когда я устанавливаю стиль в ComboBox, чтобы он использовал мой измененный шаблон, его стиль ExpressionDark переопределяется.

Единственное решение, которое я мог придумать, это попытаться убрать любую явную раскраску в шаблоне, но это не сработало. Также есть OnApplyTemplate (), но я не уверен, как мне это использовать.

У кого-нибудь есть совет, как мне это сделать?

Спасибо

1 Ответ

0 голосов
/ 18 мая 2011

Вам нужно будет основывать свой собственный стиль на неявном стиле, применяемом темой Expression Dark.Вы можете иметь только один неявный стиль, примененный к элементу.Кроме того, если вы установите свойство Style явно, то не будет применен неявный стиль.

Так что если у вас есть неявный стиль для темы Expression Dark:

<Style TargetType="ComboBox" ... />

ИПользовательский стиль, такой как:

<Style x:Key="MyStyle" TargetType="ComboBox" ... />

И используйте его так:

<ComboBox Style="{StaticResource MyStyle}" ... />

Тогда вам нужно будет изменить MyStyle, чтобы оно основывалось на неявном стиле, так что его Setters и Triggerтакже применяется так:

<Style x:Key="MyStyle" TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}" ... />

Это, очевидно, требует, чтобы неявный ресурс Style был доступен там, где вы определяете свой собственный стиль.Если неявный стиль находится в ресурсах приложения, то у вас должно быть все в порядке.

РЕДАКТИРОВАТЬ:

Поскольку вы используете Silverlight, часть x:Type не поддерживается.Вам нужно изменить тему Expression Dark, чтобы заставить это работать.

Так что если у вас есть неявный стиль для темы Expression Dark:

<Style TargetType="ComboBox" ... />

Вам нужно будет его разорватьразделить на два стиля следующим образом:

<Style x:Key="ComboBoxBaseStyle" TargetType="ComboBox" ... />
<Style TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" />

Тогда ваш собственный стиль нужно будет изменить следующим образом:

<Style x:Key="MyStyle" TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" ... />

В неявном стиле не должно быть сеттеров.Все должно быть сделано в версии ComboBoxBaseStyle.

...