Как сделать стиль кнопок System.Windows.MessageBox? - PullRequest
4 голосов
/ 03 октября 2009

Я использую System.Windows.MessageBox в приложении WPF, и по некоторым причинам его кнопки оформлены в стиле Windows 2000 - не WinXP, не Aero, не WPF по умолчанию. Просто серый с основными 3d-границами.

Как я могу заставить их выглядеть более современно? (не имеет значения, какой именно)

1 Ответ

7 голосов
/ 08 января 2010

Вы можете исправить это с помощью манифеста. В этой статье приведены пошаговые инструкции: Почему я получаю диалоговые окна и окна сообщений в старом стиле с WPF

По сути, вы должны добавить в ваше приложение XML-файл, называемый «манифест».

Обновление:

На самом деле это очень легко сделать в VS2008. Перейдите в «Свойства проекта» -> «Приложение» и нажмите кнопку «Просмотр настроек UAC». Это автоматически создаст файл манифеста приложения и откроет его. Отредактируйте этот файл следующим образом:

Сразу после строки:

</trustInfo>

Вставить в следующий раздел зависимостей:

  <!-- Activate Windows Common Controls v6 usage (XP and Vista): -->
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>

Мой полный манифест выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <!-- Activate Windows Common Controls v6 usage (XP, Vista, Win 7) to support themed dialogs: -->
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>
</asmv1:assembly>

После этого, просто соберите ваше приложение, запустите и вуаля, диалоговые кнопки MessageBox принимают стиль системной темы.

...