Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El SDK de Aplicaciones para Windows es la siguiente evolución en la plataforma de desarrollo de aplicaciones Windows. Pero en este tema se muestra cómo puede usar las API de SDK de Aplicaciones para Windows (y las API de Windows Runtime) en una aplicación Windows Presentation Foundation (WPF)!
- En muchos casos, querrá volver a crear su aplicación de WPF en forma de una aplicación WinUI 3. Solo una de las ventajas de cambiar a WinUI es tener acceso al Fluent Design System (consulte también Diseñar y codificar aplicaciones de Windows). Y WinUI forma parte del SDK de Aplicaciones para Windows, por lo que, naturalmente, una aplicación winUI también puede usar las otras características y API de SDK de Aplicaciones para Windows. En este tema no se trata el proceso de migración de la aplicación de WPF a WinUI.
- Pero si encuentra que usa características de WPF que aún no están disponibles en WinUI, puede seguir usando SDK de Aplicaciones para Windows características (como ciclo de vida de la aplicación, MRT Core, DWriteCore y otros) en la aplicación de WPF. En este tema te mostramos cómo.
Y en caso de que aún no tenga un proyecto de WPF existente o desee practicar el proceso, este tema incluye pasos para crear un proyecto de WPF para poder seguirlo y configurarlo para llamar a las API de SDK de Aplicaciones para Windows.
Requisitos previos
- Instalar herramientas para el SDK de Aplicaciones para Windows.
- En este tema se tratan las aplicaciones WPF empaquetadas y sin empaquetar. Si la aplicación de WPF está desempaquetada (que WPF aplicaciones son de forma predeterminada), asegúrese de que todas las dependencias de las aplicaciones sin empaquetar estén instaladas (consulte SDK de Aplicaciones para Windows guía de implementación para aplicaciones dependientes del marco empaquetadas con ubicación externa o sin empaquetar). Una forma rápida de hacerlo es visitar Últimas descargas para la SDK de Aplicaciones para Windows, luego descargar, descomprimir y ejecutar una de las descargas de Runtime estables .
Importante
La versión del Runtime que instale debe coincidir con la versión del Microsoft. WindowsAppSDK paquete NuGet que instalará en un paso posterior.
Para obtener más información sobre los términos desempaquetada y empaquetada, consulte Ventajas y desventajas de empaquetar la aplicación.
Cree un proyecto de WPF si aún no tiene uno
Si ya tiene un proyecto de WPF, puede pasar a la sección siguiente.
- En Visual Studio, cree un nuevo proyecto WPF Application (que es un proyecto de .NET). Tenga cuidado de elegir la plantilla de proyecto con el nombre exacto WPF Application y no el WPF App (.NET Framework) uno.
- Asigne al project un nombre y acepte las opciones predeterminadas.
Ahora usted tiene un proyecto que genera una aplicación de WPF no empaquetada.
Configuración del proyecto de WPF para la compatibilidad con SDK de Aplicaciones para Windows
En primer lugar, editaremos el archivo project.
En Explorador de soluciones, haga clic con el botón derecho en su proyecto y elija Editar archivo de proyecto.
Este paso permite llamar a Windows Runtime (WinRT) API (incluidas las API de SDK de Aplicaciones para Windows). Dentro del elemento PropertyGroup se encuentra el elemento TargetFramework, que se establece en un valor como net6.0. Anexe al valor del framework de destino un identificador (en concreto, un identificador del framework de destino). Por ejemplo, use lo siguiente si la aplicación tiene como destino Windows 10, versión 2004:
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>También dentro del elemento PropertyGroup, agregue un elemento RuntimeIdentifiers, como se muestra a continuación. Si el destino es .NET 8 o posterior, use el valor
win-x86;win-x64;win-arm64en su lugar.<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>De forma predeterminada, una aplicación de WPF está desempaquetada (lo que significa que no se instala mediante MSIX). Una aplicación sin empaquetar debe inicializar el entorno de ejecución de SDK de Aplicaciones para Windows antes de usar cualquier otra característica del SDK de Aplicaciones para Windows. Puede hacerlo automáticamente cuando la aplicación se inicie a través de la inicialización automática. Solo tiene que establecer (también dentro del elemento PropertyGroup) la propiedad del proyecto
WindowsPackageTypede manera adecuada, como sigue:<WindowsPackageType>None</WindowsPackageType>Si tiene necesidades avanzadas (como el control de errores personalizado o para cargar una versión específica del SDK de Aplicaciones para Windows), en lugar de auto-initialization puede llamar explícitamente a la API de arranque; para obtener más información, consulte Use el entorno de ejecución de SDK de Aplicaciones para Windows para aplicaciones empaquetadas con ubicación externa o sin empaquetar.
Guarde y cierre el archivo del proyecto.
A continuación, instalaremos el paquete NuGet SDK de Aplicaciones para Windows en el proyecto.
- En Explorador de soluciones, haga clic con el botón derecho en el nodo Dependencies del proyecto y elija Administrar paquetes Nuget... .
- En la ventana NuGet Administrador de paquetes, seleccione la pestaña Examinar e instale el paquete la última versión estableMicrosoft.WindowsAppSDK.
Usar algunas características de SDK de Aplicaciones para Windows en la aplicación de WPF
En esta sección se ofrece un ejemplo muy sencillo de llamar a las API de SDK de Aplicaciones para Windows desde una aplicación de WPF. Usa la característica MRT Core (consulte Administración de recursos con MRT Core). Si este ejemplo funciona para el proyecto de WPF (y si ha creado uno nuevo para este tutorial, lo hará), puede seguir estos pasos.
Agregue el siguiente marcado a
MainWindow.xaml(puede pegarlo dentro de la raíz de Grid):<StackPanel> <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button> <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock> </StackPanel>Ahora agregaremos código que usa la clase ResourceManager en el SDK de Aplicaciones para Windows para cargar un recurso de cadena.
Agregue un nuevo elemento Resources File (.resw) al project (déjelo con el nombre predeterminado de Resources.resw).
Con el archivo resources abierto en el editor, cree un nuevo recurso de cadena con las siguientes propiedades.
- Nombre: Message
- Valor: Hello, resources!
Guarde y cierre el archivo resources.
En
MainWindow.xaml.cs, agregue el siguiente código de controlador de eventos:
private void Button_Click(object sender, RoutedEventArgs e) { // Construct a resource manager using the resource index generated during build. var manager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager(); // Look up a string in the resources file using the string's name. myTextBlock.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString; }Compile el project y ejecute la aplicación. Haga clic en el botón para ver la cadena
Hello, resources!mostrada.
Sugerencia
Si en tiempo de ejecución ve un cuadro de mensaje que indica que la aplicación necesita una versión determinada del entorno de ejecución de Aplicación de Windows y pregunta si desea instalarla ahora, haga clic en Yes. Eso le llevará a las últimas descargas para el SDK de Aplicaciones para Windows. Para obtener más información, consulte la sección Requisitos previos anterior.
Consulte también Runtime architecture para obtener más información sobre la Framework dependencia de paquetes que la aplicación toma cuando usa el SDK de Aplicaciones para Windows y los componentes adicionales necesarios para funcionar en una aplicación sin empaquetar.
Empaquetar e implementar la aplicación de WPF con MSIX
Algunas características y API de Windows (incluidas las API SDK de Aplicaciones para Windows notifications) requieren que la aplicación tenga package identity en tiempo de ejecución (es decir, la aplicación debe ser packaged). Para más información, consulte Características que requieren identidad del paquete.
- En Explorador de soluciones en Visual Studio, haga clic con el botón derecho en la solución y elija Agregar>Nuevo Project... .
- En el cuadro de diálogo Agregar un nuevo project, busque packaging, elija la plantilla C# Windows Application Packaging Project project y haga clic en Siguiente.
- Asigne al project el nombre y haga clic en Crear.
- Queremos especificar qué aplicaciones de la solución se incluirán en el paquete. Por lo tanto, en el proyecto de empaquetado (no el proyecto WPF), haga clic con el botón derecho en el nodo Dependencias y elija Agregar Referencia de proyecto....
- En la lista de proyectos de la solución, elija el proyecto de WPF y haga clic en OK.
- Expande el nodo de Dependencias y Aplicaciones del proyecto de empaquetado, y confirma que se hace referencia a tu proyecto de WPF y está resaltado en negrita. Esto significa que se usará como punto de partida para el paquete.
- Haga clic con el botón derecho en el proyecto de empaquetado y elija Establecer como proyecto de inicio.
- Haga clic con el botón derecho en el proyecto WPF y elija Editar archivo del proyecto.
- Elimine
<WindowsPackageType>None</WindowsPackageType>, guarde y cierre. - En la lista desplegable Plataformas de solución, elija x64 (en lugar de Cualquier CPU).
- Confirme que puede compilar y ejecutar.
Ahora que ha empaquetado la aplicación de WPF, puede llamar a las API que requieren la identidad del paquete. Por lo tanto, en MainWindow.xaml.cs, edite el controlador de eventos para que tenga este aspecto:
private void Button_Click(object sender, RoutedEventArgs e)
{
var notification = new AppNotificationBuilder()
.AddArgument("action", "viewConversation")
.AddArgument("conversationId", "9813")
.AddText("Andrew sent you a picture")
.AddText("Check this out, The Enchantments in Washington!")
.BuildNotification();
AppNotificationManager.Default.Show(notification);
}
Compile y vuelva a ejecutar. Haga clic en el botón y confirme que se muestra una notificación emergente. Cuando se llama desde un proceso que carece de identidad de paquete en tiempo de ejecución, las API de notificaciones producen una excepción.
Nota:
En los pasos de esta sección se muestra cómo crear una aplicación empaquetada. Una alternativa es crear una aplicación empaquetada con ubicación externa. Para obtener un recordatorio de todos estos términos, consulte Ventajas y desventajas de empaquetar la aplicación.
Ejecución de código en segundo plano
Para aplicaciones WPF que necesitan ejecutar código cuando no están en funcionamiento, hay tres enfoques según el empaquetado y la carga de trabajo.
| Enfoque | Empaquetado necesario | Más adecuado para |
|---|---|---|
| Tareas en segundo plano del SDK de aplicaciones de Windows | Sí (MSIX) | Desencadenadores de eficiencia energética administrados por el sistema (tiempo/sistema) |
| Programador de tareas | No | Sincronización periódica, aplicaciones sin empaquetar |
| .NET Worker Services | No | Cargas de trabajo desacopladas de larga duración, cualquier modelo de despliegue |
Para las tareas en segundo plano del SDK de Windows App, la aplicación de la WPF registra un componente COM mediante BackgroundTaskBuilder igual que en una aplicación de WinUI 3. El evento Application.Startup en WPF corresponde al rol que App.OnLaunched desempeña en WinUI 3. Consulte Uso de tareas en segundo plano en Windows aplicaciones para ver el tutorial completo.
Nota:
Las tareas en segundo plano de SDK de Aplicaciones para Windows requieren el empaquetado MSIX. En el caso de las aplicaciones de WPF sin empaquetar, use el Programador de tareas o .NET Worker Services en su lugar.
Temas relacionados
- Windows Presentation Foundation (WPF)
- Instalar herramientas para el SDK de Aplicaciones para Windows
- SDK de Aplicaciones para Windows guía de implementación para aplicaciones dependientes del marco empaquetadas con ubicación externa o sin empaquetar
- Últimas descargas para el SDK de Aplicaciones para Windows
- Ventajas y desventajas del empaquetado de la aplicación
- Utilice el entorno de ejecución de SDK de Aplicaciones para Windows para las aplicaciones empaquetadas con ubicación externa o sin empaquetar
- Arquitectura del entorno de ejecución
- Características que requieren la identidad del paquete