2009-08-05 6 views
1

У меня есть настраиваемый элемент управления, который нуждается в небольшой настройке при работе на XP или Vista с темой Aero, есть простой способ определить тему (обнаружение операционной системы недостаточно, потому что пользователь может изменить тему) и использовать это в триггере стиля?Как определить текущую тему в Xaml WPF?

мне нужно нанести небольшое изменение маржи на Vista, чтобы получить вид требуемого:

 <Setter Property="Margin" 
       Value="0,-1,0,-1" /> 

выше сеттер в настоящее время безусловным (например, не в Trigger), но требует от меня имеющий две версии.

В идеале решение должно быть только Xaml, но при необходимости я могу открыть свойство связать с DataTrigger.

ответ

1

Вы можете написать ValueConverter, который берет настройки полей и выполняет проверку платформы/темы в своем Преобразование.

+0

Я подумал об этом, но я подумал, что он перемещает логику дизайнера в бэкэнд, в то время как обнаружение темы в Xaml (или проецирование ее туда) оставляет Xaml ответственным за внешний вид. –

+0

@Sean: конвертер полезен с привязкой, но в этом случае нет привязки. Расширение разметки, вероятно, будет более адекватным. @Ray: конвертер или расширение разметки не являются «бэкэнд» ... они всего лишь шаблонный код, чтобы сделать ваш внешний интерфейс. Если вы всегда делаете абсолютно все в XAML, вы ничего не добьетесь;) –

+0

@ Томас, я знаю, что я не могу делать все, начиная с XAML, но я хочу, чтобы код заставлял публиковать общую информацию, а не принимать решения по презентация. Перечитав ответ Шона, кажется, я пропустил часть его точки (похлопывает лоб). В конце концов, я на самом деле сделал общие настройки MVVM, которые включают свойство CurrentTheme и, следовательно, позволяют мне определять темы «Luna» или «Aero». –

Смежные вопросы