WPF с несогласованностью темы Windows по умолчанию

Очень нужна ваша помощь по теме.

Я разрабатываю приложение WPF. На моей машине для разработки я использую Windows 7 с темой Aero.

Я доставил приложение коллеге, который использовал Server 2008 без темы Aero.

Ну и внешний вид приложений сильно изменился.

Основная проблема в том, что я не понимаю причины некоторых действий. Давайте выберем тот, который должен быть простым и которого должно быть достаточно, чтобы я понял реальную проблему: Расширитель!

Я использую много Expanders в UserControl, и я заявляю, что стиль Expander имеет:

<Style TargetType="Expander">
    <Setter Property="Background" Value="#FF9B9B9B" />
    <Setter Property="Padding" Value="0" />
</Style>

Это отлично смотрится на моей машине (Windows 7 с Aero). На машине моего коллеги значение Background соблюдается, но кнопка переключения имеет серую фоновую рамку (которая кажется SystemColors.ControlBrushKey).

Это с включенным Aero, как я хочу: введите описание изображения здесь

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

Что я здесь делаю неправильно? Что я могу сделать, чтобы мое приложение красиво выглядело в Aero и в Classic?

Если я отправлю файл Aero XAML со своим приложением, будет ли он работать на компьютере с XP?

Спасибо


person Nuno Centeio    schedule 27.06.2012    source источник


Ответы (3)


Взгляните на этот запись в блоге. Кажется, автор смог решить эту проблему.

person evanb    schedule 27.06.2012
comment
Ваш ответ правильный. В моем приложении я не могу заставить его работать, но я сделал простое тестовое приложение, и оно работает. У вас есть идеи, почему это не работает в моем приложении? В окне вывода я вижу, что загружается PresentationFramework.Classic. - person Nuno Centeio; 28.06.2012
comment
Скажу лишь, что все почти работает. Только от расширителей у меня голова болит :( - person Nuno Centeio; 28.06.2012
comment
Не глядя на ваш исходный код, я не мог бы сказать вам, почему он работает в вашем тестовом приложении, а не в вашем полном приложении. Вам нужно будет посмотреть на любые различия между ними. - person evanb; 29.06.2012

Похоже, я нашел проблему. Я не совсем понимаю, почему это должно быть так, но .......

Проблема заключалась в определении стиля. Это должно быть что-то вроде:

<Style TargetType="{x:Type Expander}" BasedOn="{StaticResource {x:Type Expander}}">

Поэтому мне придется проанализировать все стили, которые я определил, и добавить свойство «На основе».

Спасибо вам всем.

person Nuno Centeio    schedule 28.06.2012

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

xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"

Это будет работать на компьютерах с XP, поскольку встроено в сборку, поставляемую с WPF.

person Joel Lucsy    schedule 27.06.2012
comment
Это не сработало. Это просто добавление пространства имен? В каждом UserControl/Window? - person Nuno Centeio; 27.06.2012
comment
Я считаю, что вам нужно установить его только в главном окне, хотя это не повредит и для каждого пользовательского элемента управления. Как это не сработало? Вы пробовали это на машине XP? - person Joel Lucsy; 27.06.2012
comment
Подождите, я думаю, вам нужно добавить к своим ссылкам PresentationFramework.Aero.dll, который вы можете найти в диалоговом окне добавления/удаления ссылок. - person Joel Lucsy; 27.06.2012
comment
Я установил его в своем MainWindow и еще в паре окон, и результат тот же. На моей машине с Windows 7, использующей классическую тему, я получаю кнопку переключения Expander со светло-серой квадратной рамкой. В аэро это эллипс. - person Nuno Centeio; 27.06.2012
comment
да. Я думаю о принудительной загрузке Aero XAML в словарь ресурсов приложения. Что вы думаете? - person Nuno Centeio; 28.06.2012