Pregunta

Estoy usando System.Windows.MessageBox en una aplicación WPF, y por alguna razón sus botones se labró la forma en que Windows 2000 - No WinXP, no Aero, no el defecto WPF. Sólo gris con bordes básicos 3d.

¿Cómo puedo hacer que aparecen con un estilo más moderno? (No importa cuál)

¿Fue útil?

Solución

Puedes solucionar este problema con un manifiesto. Consulta este artículo para obtener instrucciones paso a paso: ¿Por qué recibo diálogos de estilo antiguo archivo y cuadros de mensaje con WPF

Básicamente, hay que añadir un archivo XML denominado un 'manifiesto' a su aplicación.

Actualización:

En realidad, es muy fácil de hacer esto en VS2008. Ir al proyecto Properties-> aplicaciones y haga clic en el botón 'Vista UAC Configuración'. Esto creará automáticamente un archivo de manifiesto de aplicación y abrirlo. Editar este archivo de la siguiente manera:

Justo después de la línea:

</trustInfo>

Pegar en la sección dependencia siguiente:

  <!-- 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>

Mi manifiesto completo es el siguiente:

<?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>

Después de hacer esto, simplemente construir su aplicación, ejecutar, y listo, los botones de diálogo de mensaje de toma en el estilo del tema del sistema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top