Отображение приложения на разных OS

366
12 февраля 2017, 09:27

Есть ли какой то способ, для того что бы приложения на WinForms или WPF начиная с XP и дальше до 10, выглядели одинаково? Есть иногда даже разница между 7 и 10 виндой.

Answer 1

Смотрите.

Фреймворк WPF содержит несколько тем, каждая из которых соответствует определённому стилю UI. Эти темы содержатся в общедоступных сборках, и имеют название PresentationFramework.*.dll.

Вы должны просто подключить эти темы в ваше приложение, и они будут применены. Например, если вы хотите, чтобы всё приложение имело стиль Aero, как в Windows 7, вы должны сделать следующее: (1) подключить в References сборку PresentationFramework.Aero.dll, и (2) подключить стили в вашем App.xaml:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Aero,
                                         Version=4.0.0.0,
                                         Culture=neutral,
                                         PublicKeyToken=31bf3856ad364e35
                                ;component/themes/Aero.NormalColor.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources> 

Аналогично, вы можете подключить сборку PresentationFramework.Classic.dll и стили

            <ResourceDictionary Source="/PresentationFramework.Classic,
                                         Version=4.0.0.0,
                                         Culture=neutral,
                                         PublicKeyToken=31bf3856ad364e35
                                ;component/themes/Classic.xaml"/>

чтобы получить визуальный стиль как в «классическом» стиле Windows XP (имитация Windows 2000).

В PresentationFramework.Luna.dll есть несколько тем:

            <ResourceDictionary Source="/PresentationFramework.Luna,
                                         Version=4.0.0.0,
                                         Culture=neutral,
                                         PublicKeyToken=31bf3856ad364e35
                                ;component/themes/Luna.NormalColor.xaml"/>

— стандартная тема Windows XP,

            <ResourceDictionary Source="/PresentationFramework.Luna,
                                         Version=4.0.0.0,
                                         Culture=neutral,
                                         PublicKeyToken=31bf3856ad364e35
                                ;component/themes/Luna.Metallic.xaml"/>

— тема XP Silver (Metallic),

            <ResourceDictionary Source="/PresentationFramework.Luna,
                                         Version=4.0.0.0,
                                         Culture=neutral,
                                         PublicKeyToken=31bf3856ad364e35
                                ;component/themes/Luna.Homestead.xaml"/>

— зелёная тема XP Homestead.

В PresentationFramework.Royale.dll

            <ResourceDictionary Source="/PresentationFramework.Royale,
                                 Version=4.0.0.0,
                                 Culture=neutral,
                                 PublicKeyToken=31bf3856ad364e35
                        ;component/themes/Royale.NormalColor.xaml"/>

— тема XP Media Center Edition и т. д.

Если вы хотите вид как в Window 8/10, вам понадобится PresentationFramework.Aero2.dll и/или PresentationFramework.AeroLite.dll. Они доступны только на старших версиях Windows, так что для использования на младших вам придётся установить флажок CopyLocal и таскать сборки в комплекте. В них идёт по одной теме:

            <ResourceDictionary Source="/PresentationFramework.Aero2,
                                 Version=4.0.0.0,
                                 Culture=neutral,
                                 PublicKeyToken=31bf3856ad364e35
                        ;component/themes/Aero2.NormalColor.xaml"/>

и

            <ResourceDictionary Source="/PresentationFramework.AeroLite,
                                 Version=4.0.0.0,
                                 Culture=neutral,
                                 PublicKeyToken=31bf3856ad364e35
                        ;component/themes/AeroLite.NormalColor.xaml"/>

Вы можете, кстати, определять стили локально, тогда только этот кусок приложения будет соответствовать вашей теме. Например:

PublicKeyToken, судя по всему, всегда один и тот же.

Дополнительное чтение по теме:

  • Как установить в WPF стиль Windows 7 на XP?
  • Системная сборка с темой не находится во время выполнения
  • Как правильно стилизовать собственные контролы, если приложение использует одну из системных тем?
READ ALSO
Логика добавления записи в базы данных Access

Логика добавления записи в базы данных Access

Разъясните логику записи строки в базу

300
Мониторинг изменений в реестре

Мониторинг изменений в реестре

Не выводит запись об изменения в реестре ( вывод в консоль ) По этой статье + примере на программе: RegistryMonitor

286
Подтверждение data-confirm вызывается 2 раза

Подтверждение data-confirm вызывается 2 раза

Перед сохранением хотел сделать подтверждение, прописал data-confirm и теперь окно вызывается 2 раза перед отправкой формы

354