Publicación de una aplicación WPF con estilos visuales habilitados

Los estilos visuales permiten cambiar el aspecto de los controles comunes en función del tema elegido por el usuario. De forma predeterminada, los estilos visuales no están habilitados para las aplicaciones de Windows Presentation Foundation (WPF), por lo que es necesario habilitarlos manualmente. Sin embargo, habilitar los estilos visuales para una aplicación WPF y publicar después la solución produce un error. En este tema se describe cómo resolver este error y el proceso para publicar una aplicación WPF con estilos visuales habilitados. Para obtener más información sobre los estilos visuales, vea Descripción general de los estilos visuales. Para obtener más información sobre el mensaje de error, consulte Solución de errores específicos en implementaciones ClickOnce.

Para resolver el error y publicar la solución, debe realizar las tareas siguientes:

Publicar la solución sin estilos visuales habilitados

  1. Asegúrese de que el proyecto no tiene estilos visuales habilitados. En primer lugar, compruebe si existe el XML siguiente en el archivo de manifiesto del proyecto. A continuación, si el XML está presente, inclúyalo en una etiqueta de comentario.

    Los estilos visuales están deshabilitados de manera predeterminada.

    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
        </dependentAssembly>
    </dependency>
    

    Los procedimientos siguientes muestran cómo abrir el archivo de manifiesto asociado al proyecto.

    Para abrir el archivo de manifiesto en un proyecto de Visual Basic

    1. En la barra de menús, elija Proyecto, Propiedades deProjectName, donde ProjectName es el nombre del proyecto de WPF.

      Aparecerán las páginas de propiedades del proyecto de WPF.

    2. En la pestaña Aplicación, elija Ver configuración de Windows.

      El archivo app.manifest se abrirá en el Editor de código.

    Para abrir el archivo de manifiesto en un proyecto de C#

    1. En la barra de menús, elija Proyecto, Propiedades deProjectName, donde ProjectName es el nombre del proyecto de WPF.

      Aparecerán las páginas de propiedades del proyecto de WPF.

    2. En la pestaña Aplicación, anote el nombre que aparece en el campo de manifiesto. Este es el nombre del manifiesto que está asociado al proyecto.

      Nota:

      Si aparece Incrustar manifiesto con configuración predeterminada o Crear aplicación sin manifiesto en el campo de manifiesto, los estilos visuales no están habilitados. Si el nombre de un archivo de manifiesto aparece en el campo de manifiesto, continúe con el paso siguiente de este procedimiento.

    3. En el Explorador de soluciones, elija Mostrar todos los archivos.

      Este botón muestra todos los elementos del proyecto, incluidos los que se han excluido y los que normalmente están ocultos. El archivo de manifiesto aparece como un elemento de proyecto.

  2. Compile y publique la solución. Para obtener más información sobre cómo publicar la solución, vea Cómo: Publicar una aplicación ClickOnce mediante el Asistente para publicación.

Crear un archivo de manifiesto

  1. Pegue el código siguiente en un archivo de Bloc de notas.

    Este XML describe el ensamblado que contiene los controles que admiten estilos visuales.

    <?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">
        <dependency>
            <dependentAssembly>
                <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
            </dependentAssembly>
        </dependency>
    </asmv1:assembly>
    
  2. En el Bloc de notas, haga clic en Archivo y, a continuación, haga clic en Guardar como.

  3. En el cuadro de diálogo Guardar como, en la lista desplegable Guardar como tipo, seleccione Todos los archivos.

  4. En el cuadro Nombre de archivo, asigne un nombre al archivo y anexe .manifest al final de dicho nombre. Por ejemplo: themes.manifest.

  5. Elija el botón Examinar carpetas, seleccione una carpeta y después haga clic en Guardar.

    Nota:

    Los procedimientos restantes dan por supuesto que el nombre de este archivo es themes.manifest y que el archivo se guardará en el directorio de C:\temp del equipo.

Incrustar el archivo de manifiesto en el archivo ejecutable de la solución publicada

  1. Abra Símbolo del sistema para desarrolladores de Visual Studio.

    Para obtener más información sobre cómo abrir el Símbolo del sistema para desarrolladores de Visual Studio, vea Símbolo del sistema para desarrolladores y PowerShell para desarrolladores.

    Nota:

    Los pasos restantes realizan las suposiciones siguientes sobre la solución:

    • El nombre de la solución es MyWPFProject.

    • Esta solución se encuentra en el siguiente directorio: %UserProfile%\Documents\Visual Studio version\Projects\.

    • Esta solución se publica en el siguiente directorio: %UserProfile%\Documents\Visual Studio version\Projects\publish.

    • La versión más reciente de los archivos de aplicación publicados se encuentra en el directorio siguiente: %UserProfile%\Documents\Visual Studio version\Projects\publish\Application Files\WPFApp_1_0_0_0

    No es necesario usar el nombre o las ubicaciones de directorio descritas anteriormente. El nombre y las ubicaciones descritos anteriormente se utilizan únicamente para mostrar los pasos necesarios para publicar la solución.

  2. En el símbolo del sistema, cambie la ruta de acceso al directorio que contiene la versión más reciente de los archivos de aplicación publicados. En el ejemplo siguiente se muestra cómo.

    cd "%UserProfile%\Documents\Visual Studio version\Projects\MyWPFProject\publish\Application Files\WPFApp_1_0_0_0"
    
  3. En el símbolo del sistema, ejecute el comando siguiente para incrustar el archivo de manifiesto en el archivo ejecutable de la aplicación.

    mt -manifest c:\temp\themes.manifest -outputresource:MyWPFApp.exe.deploy
    

Firmar los manifiestos de aplicación e implementación

  1. En el símbolo del sistema, ejecute el comando siguiente para quitar la extensión .deploy del archivo ejecutable del directorio actual.

    ren MyWPFApp.exe.deploy MyWPFApp.exe
    

    Nota:

    Este ejemplo supone que solo un archivo tiene la extensión de archivo .deploy. Asegúrese de cambiar el nombre de todos los archivos de este directorio que tengan la extensión de archivo .deploy.

  2. En el símbolo del sistema, ejecute el comando siguiente para firmar el manifiesto de aplicación,

    mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx
    

    Nota:

    Este ejemplo supone que se firma el manifiesto usando el archivo .pfx del proyecto. Si no va a firmar el manifiesto, puede omitir el parámetro -cf que se usa en este ejemplo. Si va a firmar el manifiesto con un certificado que requiera una contraseña, especifique la opción -password (For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password).

  3. En el símbolo del sistema, ejecute el comando siguiente para agregar la extensión .deploy al nombre del archivo al que cambió de nombre en un paso anterior de este procedimiento.

    ren MyWPFApp.exe MyWPFApp.exe.deploy
    

    Nota:

    Este ejemplo supone que solo un archivo tenía la extensión de archivo .deploy. Asegúrese de cambiar el nombre de todos los archivos de este directorio que tuvieran previamente la extensión de nombre de archivo .deploy.

  4. En el símbolo del sistema, ejecute el comando siguiente para firmar el manifiesto de implementación,

    mage -u ..\..\MyWPFApp.application -appm MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx
    

    Nota:

    Este ejemplo supone que se firma el manifiesto usando el archivo .pfx del proyecto. Si no va a firmar el manifiesto, puede omitir el parámetro -cf que se usa en este ejemplo. Si va a firmar el manifiesto con un certificado que requiera una contraseña, especifique la opción -password, como en este ejemplo: For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password.

    Después de realizar estos pasos, puede mover los archivos publicados a la ubicación desde la que desea que los usuarios finales instalen la aplicación. Si tiene intención de actualizar la solución con frecuencia, puede mover estos comandos a un script y ejecutar este cada vez que publique una nueva versión.