При переопределении шаблонов WPF мне нужно переопределять шаблон каждой темы отдельно? - PullRequest
4 голосов
/ 25 марта 2010

У меня есть требование изменить очень маленькую часть шаблона WPF ComboBox.

Если я возьму копию существующего шаблона для темы Luna и внесу изменения, все сначала будет работать нормально. Но если у пользователя другая тема, моя ComboBox сохраняет свою собственную тему (которая, очевидно, основана на Luna), поэтому выглядит неуместно.

Есть ли способ переопределить только части шаблона, чтобы большая часть шаблона по-прежнему учитывала тему Windows?

Я заметил, что части шаблона определяют пространство имен mwt с явной ссылкой на Luna:

xmlns:mwt="...blah blah...=PresentationFramework.Luna"

возможно, есть какой-то способ, чтобы это пространство имен mwt ссылалось на текущую тему, а не конкретно на тему Luna?

Или я должен предоставить индивидуальную копию шаблона для каждой темы? И что произойдет, если MS создаст новую тему, придется ли мне затем обновлять мой шаблон для ее поддержки?

(Бит, который я изменяю, относится только к TextBlock, отображаемому, когда поле со списком закрыто. Я не изменяю раскрывающийся список или кнопку. В идеале я бы просто переопределил SelectionBoxItemTemplate на ComboBox но это только для чтения, поэтому, насколько я могу судить, я должен переопределить весь шаблон элемента управления, чтобы внести какие-либо изменения.)

[Соответствующий вопрос, но нет ответов: Настроить шаблон управления и при этом соблюдать тему ОС? ]

1 Ответ

5 голосов
/ 25 марта 2010

Стоит помнить, что однажды вы создаете ControlTemplate для вас контроль, вы заменяете весь ControlTemplate.

От: http://msdn.microsoft.com/en-us/library/ms745683.aspx

Что я понял из этого, так это то, что нет способа заменить части шаблона. Шаблон считается единым блоком. Однако могут быть способы настроить ваш шаблон, чтобы разрешить изменения через стили (которые могут быть основаны на других стилях).

Если MS создает новую тему, вам придется обновить собственные шаблоны управления для реализации аналогичной темы. Помните, что вы заменяете, а не улучшаете шаблон элемента управления.

...