2012-06-27 1 views
1

Мне очень нужна ваша помощь в теме.WPF с несоответствием темы Windows по умолчанию

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

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

Ну, приложения выглядят & резко упали.

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

Я использую много расширителей в UserControl и Я объявляю стиль расширитель имеет:

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

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

Это с Aero включен, как я хочу: enter image description here

И это то, что я получаю с Классической темой: enter image description here

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

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

Благодаря

ответ

3

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

+0

Ваш ответ правильный. В моем приложении я не могу заставить его работать, но я сделал простое тестовое приложение, и оно работает. У вас есть идеи, почему это не работает в моем приложении? В окне «Вывод» я вижу, что загружается PresentationFramework.Classic. –

+0

Позвольте мне сказать, что все почти работает. Только Расширители дают мне головную боль :( –

+0

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

0

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

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

Это будет работать на машинах XP, как это встроенный в сборку поставляется с WPF.

+0

Это не сработало. Это просто добавление пространства имен? В каждом UserControl/Window? –

+0

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

+0

Подождите, я думаю, вам нужно добавить к своим ссылкам «PresentationFramework.Aero.dll», которые вы можете найти в диалоговом окне добавления/удаления ссылок. –

2

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

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

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

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

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

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

  • Нет связанных вопросов^_^