Тема Windows 7 для WPF?

Есть ли способ сделать так, чтобы приложение WPF выглядело так, как будто оно работает в Windows 7, даже если оно работает в XP? Я ищу какую-то тему, которую можно просто вставить. Мне известно о проекте тем на Codeplex (https://archive.codeplex.com/?p=wpfthemes), но в нем отсутствует поддержка DataGrid, что мне очень нужно. Я подумал, может быть, тема Windows 7 будет просто простым портом или уже существует где-то в каком-то файле.


Обновить

Используя идею @Lars Truijens, я смог заставить Windows 7 искать основные элементы управления, но, к сожалению, это не сработало для элемента управления WPF Toolkit DataGrid, который мне нужен.

DataGrid выглядит так с темой Aero

DataGrid в стиле Windows XP

DataGrid должен выглядеть так

Windows 7-look DataGrid

Итак, я все еще ищу решение этой проблемы, если у кого-то есть идеи. Может быть, кто-то построил расширение для темы Aero, которое охватывает элементы управления инструментария WPF? Опять же, мы очень ценим любую имеющуюся у вас информацию.


Обновление 2 - проблема с DataGrid решена!

Чтобы тема Aero работала с DataGrid или любыми другими элементами управления WPF Toolkit, вам просто нужно добавить второй словарь Aero, чтобы ваш App.xaml теперь выглядел так.

<Application.Resources>
    ...
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary
                Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
            <ResourceDictionary
                Source="pack://application:,,,/WPFToolkit;component/Themes/Aero.NormalColor.xaml" />
            ...
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Кроме того, я бы порекомендовал отключить линии сетки в ваших DataGrid элементах управления (потому что они выглядят ужасно):

<DataGrid GridLinesVisibility="None" ...>

person devuxer    schedule 16.01.2010    source источник
comment
Ваше Обновление 2 спасло мне жизнь !!! Спасибо за публикацию этого обновления!   -  person Sonosar    schedule 17.06.2013


Ответы (3)


WPF поставляется со стандартными темами Windows во всех версиях Windows. Например, вы можете установить тему Aero (которая используется в Vista и Windows 7) в Windows XP, выполнив следующие действия:

  1. Добавьте PresentationFramework.Aero в список ссылок вашего приложения по мере необходимости.
  2. Отредактируйте свой App.xaml

из этого

<Application.Resources>
  <!-- Your stuff here -->
</Application.Resources>

к этому

<Application.Resources>
  <ResourceDictionary>
    <!-- Put your stuff here instead -->

    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources> 

Источник: http://mrpmorris.blogspot.com/2008/05/using-vista-aero-theme-in-xp-wpf-apps.html

Другие альтернативы ниже. Обязательно добавьте соответствующую сборку в список ссылок вашего приложения по мере необходимости.

<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Classic;component/themes/Classic.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Royale;component/themes/Royale.NormalColor.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Luna.Homestead;component/themes/Luna.Homestead.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Luna.Metallic;component/themes/Luna.Metallic.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Zune;component/themes/Zune.NormalColor.xaml"/>
person Lars Truijens    schedule 16.01.2010
comment
Наконец-то у меня появилась возможность попробовать это. Это работает, но, как я и опасался, не для элемента управления DataGrid. Пожалуйста, ознакомьтесь с моим обновлением. Тема DataGrid w / Aero выглядит по-прежнему XP. - person devuxer; 20.01.2010
comment
Что ж, милая, я только что наткнулся на решение проблемы DataGrid: <ResourceDictionary Source="pack://application:,,,/WPFToolkit;component/Themes/Aero.NormalColor.xaml" />. Я тоже обновлю свой вопрос. - person devuxer; 20.01.2010
comment
Вам следует преобразовать динамическую ссылку в полную, иначе вам нужно развернуть PresentationFramework.aero. См. Мой ответ здесь: stackoverflow.com/questions/8175410/ - person Helge Klein; 18.11.2011
comment
это дает мне FileNotFoundException: Could not load file or assembly 'PresentationFramework.Aero - person mrid; 21.01.2019

Одно дополнение к ответу Ларса и обновлению DanM:

При развертывании вы должны добавить aero Dll в каталог установки.

Вы можете сделать это, перейдя в свойства PresentationFramework.Aero, которые вы добавили в ссылки, и установив CopyLocal=True. Затем вам нужно будет перейти к любому инструменту развертывания, который вы используете (я люблю WIX ...), и добавить его в список развернутых файлов.

person GuYsH    schedule 15.05.2011
comment
Я не думаю, что нужно развертывать PresentationFramework.aero. Согласно msdn.microsoft.com/en-us/library/ff462634.aspx он включен в .NET framework. - person Helge Klein; 18.11.2011
comment
PresentationFramework.aero не требует развертывания, если используется полная ссылка. См. Мой ответ здесь: stackoverflow.com/questions/8175410/ - person Helge Klein; 18.11.2011

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

Надеюсь, мой ответ тебе поможет

person Community    schedule 21.03.2020