stringtranslate.com

Fundación para la presentación de Windows

Windows Presentation Foundation ( WPF ) es un marco de interfaz de usuario gratuito y de código abierto para aplicaciones de escritorio basadas en Windows . Las aplicaciones WPF se basan en .NET y se desarrollan principalmente utilizando C# y XAML . [2]

Originalmente desarrollado por Microsoft , WPF fue lanzado inicialmente como parte de .NET Framework 3.0 en 2006. En 2018, Microsoft lanzó WPF como código abierto bajo la Licencia MIT . [3] El diseño de WPF y su lenguaje de diseño XAML han sido adoptados por varios otros marcos de interfaz de usuario, como UWP , .NET MAUI y Avalonia .

Descripción general

WPF emplea XAML , un lenguaje basado en XML , para definir y vincular varios elementos de interfaz, y utiliza C# para definir el comportamiento del programa. [4] Las aplicaciones WPF se implementan como programas de escritorio independientes.

WPF admite una serie de elementos comunes de interfaz de usuario , como renderizado 2D/3D, documentos fijos y adaptables , tipografía , gráficos vectoriales , animación en tiempo de ejecución y medios pre-renderizados. Estos elementos pueden luego vincularse y manipularse en función de varios eventos, interacciones del usuario y enlaces de datos . [5]

Las bibliotecas de tiempo de ejecución de WPF están incluidas en todas las versiones de Microsoft Windows desde Windows Vista y Windows Server 2008. [ 6] [7]

En el evento Microsoft Connect del 4 de diciembre de 2018, Microsoft anunció el lanzamiento de WPF como proyecto de código abierto en GitHub. Se publica bajo la licencia MIT . Windows Presentation Foundation se ha vuelto disponible para proyectos que apuntan al marco de software .NET , sin embargo, el sistema no es multiplataforma y todavía está disponible solo en Windows. [3] [8]

Ejemplos de código

Captura de pantalla del desarrollo de una aplicación de interfaz de usuario básica de Windows Presentation Foundation (WPF) en Visual Studio 2022. Se utiliza XAML para definir el diseño, mientras que C# se utiliza para definir el comportamiento interactivo.

En WPF, las pantallas y otros elementos de la interfaz de usuario se definen mediante un par de archivos: un archivo XAML y un archivo C# asociado con la extensión .xaml.cs, a menudo denominado "código subyacente". El archivo XAML define de forma declarativa el diseño, el contenido y otras propiedades del elemento de la interfaz de usuario, mientras que el archivo C# permite la exposición de puntos de entrada de código para la interactividad. [4]

Un ejemplo básico de un programa interactivo ¡Hola mundo! podría crearse de la siguiente manera:

Ventana principal.xaml:

<Ventana x:Class= "WpfExample.MainWindow" xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" Título= "Ventana principal" Altura= "200" Anchura= "300" > <StackPanel Orientación= "Vertical" > <TextBlock Texto= "¿Cuál es su nombre?" /> <TextBox x:Name= "NameInputTextBox" /> <Button x:Name= "SubmitButton" Clic= "SubmitButton_Click" > <TextBlock Texto= "Enviar" /> </Button> <TextBlock x:Name= "ResultTextBlock" /> </StackPanel> </Ventana>                     

Ventana principal.xaml.cs:

utilizando System.Windows ; espacio de nombres WpfExample { clase parcial pública MainWindow : Window { pública MainWindow () { InitializeComponent (); }              void privado SubmitButton_Click ( objeto remitente , RoutedEventArgs e ) { var nombre = this . NameInputTextBox . Text ; this . ResultTextBlock . Text = $"¡Hola {nombre}!" ; } } }               

MainWindowEn el ejemplo anterior, se declara un elemento de la interfaz de usuario llamado como una subclase de la clase incorporada Window. El archivo XAML define el diseño, que en este ejemplo es una colección vertical de controles: un bloque de texto que describe las instrucciones para el usuario, un cuadro de texto para que el usuario escriba su nombre, un botón para enviar y un bloque de texto de resultados. Cuando se hace clic en el botón, SubmitButton_Clickse llama al método, que está definido en el .xaml.csarchivo. Esta función actualiza el bloque de texto final para que contenga un mensaje que saluda al usuario y se dirige a él por el nombre enviado.

Características

Medios y gráficos

WPF admite la mayoría de los tipos de medios modernos, incluidas imágenes vectoriales y rasterizadas, audio, video, y puede admitir renderización tanto 2D como 3D. [9] También admite la implementación de efectos gráficos en elementos visuales, como sombreadores de píxeles HLSL y efectos integrados como desenfoques y sombras paralelas . [10] [11]

WPF se basa principalmente en gráficos vectoriales, lo que permite escalar la mayoría de los controles y elementos sin pérdida de calidad o pixelación . [12] [13]

Vinculación de datos

WPF emplea el enlace de datos , una técnica de propagación de cambios entre los elementos de la interfaz de usuario y el modelo de objetos del programa. [14] Por ejemplo, un bloque de texto definido en XAML podría enlazar su contenido a una propiedad de cadena almacenada en un objeto C# de la siguiente manera:

<TextBlock Text= "{Nombre de usuario de enlace}" />  
clase pública ExampleViewModel { cadena pública Nombre de usuario { obtener ; establecer ; } }         

Esto haría que el bloque de texto muestre el valor de la Usernamepropiedad.

La dirección en la que se produce el enlace de datos es configurable: se puede definir para que vaya de la interfaz de usuario a la fuente (por ejemplo, el texto ingresado en un cuadro de texto se propaga a una propiedad de cadena enlazada en el código), o de la fuente a la interfaz de usuario (por ejemplo, un reloj visual se actualiza para mostrar la hora actual almacenada en el código), o bidireccional. [14]

La vinculación de datos no tiene ninguna restricción en cuanto a tipos, y es posible vincular estructuras , clases o colecciones . Se pueden utilizar convertidores para transponer los valores y tipos que se utilizan durante la vinculación; por ejemplo, vincular un cuadro de texto a una propiedad DateTime , pero utilizando un convertidor para mostrar la hora como una cadena de fecha localizada y formateada . [14]

La mayoría de las propiedades de los controles integrados pueden estar vinculadas a datos, y los controles personalizados pueden crear propiedades vinculables definiendo propiedades de dependencia. [14] [15]

MVVM , el patrón arquitectónico recomendado por Microsoft para los desarrolladores de WPF, se basa en gran medida en el enlace de datos. [16]

Estilos y plantillas

Utilizando plantillas y estilos, los desarrolladores pueden definir los elementos visuales y la estructura de la interfaz de usuario.

Un estilo es una combinación de configuraciones de propiedades que se pueden aplicar a un elemento de la interfaz de usuario con un único atributo de propiedad. Por ejemplo, se puede crear un estilo de " botón de opción azul " y luego reutilizarlo en cualquier cantidad de controles de botón de opción en todo el programa. Los estilos pueden modificar conjuntos de propiedades de controles, pero no están pensados ​​para realizar cambios estructurales significativos.

Las plantillas son un mecanismo para definir una interfaz de usuario alternativa para partes de una aplicación WPF. Hay varios tipos de plantillas disponibles en WPF para diferentes escenarios, pero todas tienen el propósito general de definir el contenido, el diseño y la estructura de un elemento de la interfaz de usuario. [17]

Animaciones

En WPF, muchas propiedades visuales se pueden animar. Esto se expone a través de propiedades de dependencia, que es el mismo sistema subyacente en el que se basa el enlace de datos. Las animaciones de WPF se basan en el tiempo, a diferencia de las basadas en cuadros. [18]

Las clases de animación se basan en el tipo de propiedad .NET que se va a animar. Por ejemplo, el cambio de color de un elemento se realiza con la clase ColorAnimation y la animación del ancho de un elemento (que se escribe como double ) se realiza con la clase DoubleAnimation. [18]

Las animaciones se pueden agrupar en guiones gráficos, que son la forma principal de iniciar, detener, pausar y manipular animaciones. [18]

Documentos y textos

WPF admite documentos paginados de forma nativa. Proporciona la DocumentViewerclase que sirve para leer documentos con un diseño fijo. La FlowDocumentReaderclase ofrece distintos modos de visualización, como por página o desplazable, y también reajusta el texto si se cambia el tamaño del área de visualización. Admite tanto la especificación de papel XML como las convenciones de empaquetado abierto . [19]

WPF incluye una serie de funciones de representación de texto, incluidas las fuentes OpenType , TrueType y OpenType CFF ( Compact Font Format ). Esto significa que WPF puede admitir una amplia variedad de funciones de texto, incluidas ligaduras , numerales de estilo antiguo , variantes de caracteres floreados , fracciones , superíndices y subíndices , versalitas , caracteres rubí , sustitución de glifos , líneas de base múltiples y kerning . [20]

WPF maneja textos en Unicode y maneja textos independientemente de configuraciones globales, como la configuración regional del sistema. Además, se proporcionan mecanismos de respaldo para permitir que la dirección de escritura (horizontal versus vertical) se gestione independientemente del nombre de la fuente; construir fuentes internacionales a partir de fuentes compuestas, utilizando un grupo de fuentes de un solo idioma; incrustación de fuentes compuestas. La información de vinculación de fuentes y respaldo de fuentes se almacena en un archivo XML portátil, utilizando tecnología de fuentes compuestas. [21] El archivo XML tiene la extensión .CompositeFont .

El motor de texto WPF también admite la corrección ortográfica integrada . También admite funciones como el espaciado automático de líneas, texto internacional mejorado, saltos de línea guiados por idioma, separación de palabras y justificación, efectos de mapa de bits, transformaciones y efectos de texto como sombras, desenfoque, brillo, rotación, etc. También admite texto animado; esto se refiere a glifos animados, así como cambios en tiempo real en la posición, tamaño, color y opacidad del texto.

La representación de texto de WPF aprovecha los avances de la tecnología ClearType , como el posicionamiento de subpíxeles, los anchos de avance naturales, el suavizado de direcciones Y, la representación de texto acelerada por hardware , así como el almacenamiento en caché agresivo de texto pre-renderizado en la memoria de video. [22] ClearType no se puede desactivar en aplicaciones WPF 3.x más antiguas. [23]

Interoperabilidad

Las características de Windows Forms son posibles mediante el uso de las clases ElementHosty WindowsFormsHost.

Para habilitar el uso de WinForms, el desarrollador ejecuta esto desde su código C# de WPF: [24]

Sistema.Windows.Forms.Integración.WindowsFormsHost.EnableWindowsFormsInterop();

Los programas WPF, a través de la función P/Invoke del CLR , pueden acceder a funciones nativas, como funciones de llamada desde bibliotecas de Windows . Esto permite la capacidad de comunicarse y operar otras partes del sistema operativo, incluidas bibliotecas no administradas . [25]

Entrada alternativa y accesibilidad

WPF es compatible con Windows Ink para entrada basada en lápiz , [26] y entrada multitáctil en Windows 7 y superiores. [27] También es compatible con Microsoft UI Automation para permitir a los desarrolladores crear interfaces accesibles y exponer la UI a marcos de prueba automatizados. [28]

XAML

Tras el éxito de los lenguajes de marcado para el desarrollo web, WPF introdujo el lenguaje de marcado de aplicaciones extensible ( XAML; /ˈzæməl/ ) , que se basa en XML . XAML está diseñado como un método más eficiente para desarrollar interfaces de usuario de aplicaciones. [29] XAML es un lenguaje declarativo , lo que significa que el desarrollador (o diseñador) describe el comportamiento y la integración de los componentes sin el uso de la programación procedimental . Aunque es raro que una aplicación completa se construya completamente en XAML, la introducción de XAML permite a los diseñadores de aplicaciones contribuir de manera más efectiva al ciclo de desarrollo de la aplicación. El uso de XAML para desarrollar interfaces de usuario también permite la separación del modelo y la vista, lo que se considera un buen principio arquitectónico. [30] En XAML, los elementos y atributos se asignan a clases y propiedades en las API subyacentes.

Al igual que en el desarrollo web, tanto los diseños como los temas específicos son adecuados para el marcado, pero XAML no es necesario para ninguno de ellos. De hecho, todos los elementos de WPF pueden codificarse en un lenguaje .NET ( C# , VB.NET ). El código XAML puede compilarse en un ensamblado administrado de la misma manera que todos los lenguajes .NET.

Despliegue

Las aplicaciones WPF son ejecutables de escritorio independientes exclusivos de Windows .

Históricamente, WPF admitía la compilación en XBAP , un formato de archivo destinado a mostrarse en navegadores web a través de un complemento NPAPI , pero los navegadores dejaron de admitir NPAPI y XBAP y la compilación XBAP ya no está incluida en WPF para .NET. [31] [32]

Uso y recepción

Visual Studio es un ejemplo de una aplicación realizada con WPF

WPF se utiliza para desarrollar Visual Studio , el IDE insignia de Microsoft , y se utilizó para desarrollar Microsoft Expression Blend . [33]

Influencia en otros marcos de interfaz de usuario

Un ejemplo de una aplicación creada con UWP, un marco basado en XAML influenciado por WPF

WPF y su lenguaje de diseño, XAML, han influido en muchos otros marcos de interfaz de usuario.

Silverlight (cuyo nombre en código es WPF/E - WPF Everywhere), lanzado en 2007, es un complemento para navegadores que ya no se utiliza y que funciona en todos los navegadores . Este complemento contenía tecnología basada en WPF, incluido XAML, que proporcionaba funciones como vídeo, gráficos vectoriales y animaciones. En concreto, se proporcionó como complemento para Mozilla Firefox , Internet Explorer 6 y versiones posteriores, Google Chrome 42 y versiones anteriores y Apple Safari . Microsoft animó a los desarrolladores a dejar de usar Silverlight en 2015, [34] y el soporte finalizó oficialmente en 2021. [35]

Después de convertirse en código abierto en 2018, WPF se bifurcó para el proyecto Avalonia , un marco de interfaz de usuario basado en XAML multiplataforma de código abierto .NET, distribuido bajo la licencia MIT . Si bien WPF solo está destinado a Windows, Avalonia también admite compilaciones para la web (a través de WebAssembly ), MacOS , Android , iOS y Linux . El nombre de Avalonia hace referencia al nombre en código en desarrollo de WPF ("Avalon") y se comercializa como "un sucesor espiritual de WPF". [36] Avalonia se usa actualmente en herramientas creadas por Unity , GitHub y JetBrains . [37]

XAML, que fue diseñado inicialmente para WPF, ha sido adoptado por otras bibliotecas de interfaz de usuario similares desarrolladas por Microsoft, como UWP , [38] diseñada para aplicaciones de Windows 10 , Windows 11 , Xbox One y Xbox Series S/X , y .NET MAUI (anteriormente Xamarin.Forms ), diseñada para crear aplicaciones nativas multiplataforma para Android e iOS . [39]

Desarrollo

Los desarrolladores de aplicaciones WPF suelen utilizar Microsoft Visual Studio . Visual Studio contiene una combinación de editor XAML y diseñador visual WPF, a partir de Visual Studio 2008. [40] Antes de Visual Studio 2008, el complemento de diseñador WPF , cuyo nombre en código era Cider, era la versión original de un editor WYSIWYG para crear ventanas, páginas y controles de usuario WPF. Estaba disponible para Visual Studio 2005 como una extensión de Visual Studio 2005 para .NET Framework 3.0 CTP para la versión inicial de WPF. [41]

Visual Studio no es estrictamente necesario para desarrollar proyectos WPF, ya que las soluciones se pueden crear en la línea de comandos utilizando MSBuild . [42]

Microsoft Blend es una herramienta orientada al diseño que proporciona una mesa de trabajo para la creación de aplicaciones WPF con gráficos 2D y 3D, texto y contenido de formularios. Genera XAML que se puede exportar a otras herramientas y comparte soluciones (archivos sln) y formatos de proyecto (csproj, vbproj) con Microsoft Visual Studio. Microsoft Expression Design es una herramienta de gráficos de mapa de bits y de vector 2D para exportar a XAML .

Referencias

  1. ^ "v8.0.5". github.com . 2023-05-14 . Consultado el 2023-05-30 .
  2. ^ "¿Qué es Windows Presentation Foundation - WPF .NET?" learn.microsoft.com . 2023-06-02 . Consultado el 2024-05-15 .
  3. ^ ab Martin, Jeff (4 de diciembre de 2018). "Microsoft hace de código abierto WPF, WinForms y WinUI". InfoQ . Consultado el 6 de diciembre de 2018 .
  4. ^ ab dotnet-bot. «Descripción general de XAML (WPF)». msdn.microsoft.com . Consultado el 31 de marzo de 2018 .
  5. ^ Sells, Chris; Griffiths, Ian (2007). Programación de WPF: creación de una interfaz de usuario de Windows con Windows Presentation Foundation. "O'Reilly Media, Inc." ISBN 9780596554798.
  6. ^ kexugit (14 de marzo de 2007). "Mailbag: ¿Qué versión de .NET Framework está incluida en qué versión del sistema operativo?". learn.microsoft.com . Consultado el 25 de mayo de 2024 .
  7. ^ gewarren (24 de abril de 2024). "Versiones de .NET Framework y del sistema operativo Windows - .NET Framework". learn.microsoft.com . Consultado el 25 de mayo de 2024 .
  8. ^ Hanselman, Scott (4 de diciembre de 2018). "Anunciamos que WPF, WinForms y WinUI pasarán a ser de código abierto" . Consultado el 6 de diciembre de 2018 .
  9. ^ Gráficos y multimedia. Msdn.Microsoft.com. Consultado el 29 de agosto de 2013.
  10. ^ dotnet-bot. «Clase de efecto (System.Windows.Media.Effects)». learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  11. ^ "4. Cómo WPF y Silverlight usan sombreadores: sombreadores de píxeles y HLSL para desarrolladores de XAML [Libro]". www.oreilly.com . Consultado el 28 de mayo de 2024 .
  12. ^ "Presentación de Windows Presentation Foundation". msdn.microsoft.com . Consultado el 31 de marzo de 2018 .
  13. ^ "¿Qué novedades trae WPF 3.5? Aquí tienes quince características interesantes..." Consultado el 14 de octubre de 2007 .
  14. ^ abcd adegeo (2023-09-02). "Descripción general del enlace de datos: WPF .NET". learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  15. ^ adegeo (28 de junio de 2022). «Descripción general de las propiedades de dependencia: WPF .NET». learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  16. ^ kexugit (8 de diciembre de 2016). "Patrones: aplicaciones WPF con el patrón de diseño Modelo-Vista-Modelo de vista". learn.microsoft.com . Consultado el 25 de mayo de 2024 .
  17. ^ adegeo (3 de marzo de 2023). "Estilos y plantillas - WPF .NET". learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  18. ^ abc adegeo (17 de marzo de 2022). «Descripción general de la animación: WPF .NET Framework». learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  19. ^ adegeo (6 de febrero de 2023). «Descripción general de los documentos: WPF .NET Framework». learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  20. ^ adegeo (18 de agosto de 2022). "Características de las fuentes OpenType - WPF .NET Framework". learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  21. ^ "Tipografía en Windows Presentation Foundation". msdn.microsoft.com . Consultado el 31 de marzo de 2018 .
  22. ^ dotnet-bot. «Descripción general de ClearType». msdn.microsoft.com . Consultado el 31 de marzo de 2018 .
  23. ^ "Desactivar suavizado de contornos". social.msdn.microsoft.com . Consultado el 31 de marzo de 2018 .
  24. ^ dotnet-bot. "Método WindowsFormsHost.EnableWindowsFormsInterop (System.Windows.Forms.Integration)". learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  25. ^ jkoritzinsky (10 de mayo de 2024). "Platform Invoke (P/Invoke) - .NET". learn.microsoft.com . Consultado el 25 de mayo de 2024 .
  26. ^ adegeo (18 de agosto de 2022). "Tinta digital: Windows Forms y COM frente a WPF". learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  27. ^ kexugit (12 de agosto de 2015). "MSDN Magazine: UI Frontiers - Eventos de manipulación multitáctil en WPF". learn.microsoft.com . Consultado el 22 de mayo de 2024 .
  28. ^ Xansky. "Descripción general de la automatización de la interfaz de usuario". msdn.microsoft.com . Consultado el 31 de marzo de 2018 .
  29. ^ MacDonald, Matthew (2010). Pro WPF en VB 2010: Windows Presentation Foundation en .NET 4. Apress. ISBN 9781430272403.
  30. ^ Larman, Craig. https://courses.cs.duke.edu/compsci308/spring24/readings/larman_model_view_separation.pdf Aplicación de UML y patrones: una introducción al análisis y diseño orientado a objetos y al proceso unificado (2.ª ed.). pág. 472. {{cite book}}: Enlace externo en |title=( ayuda )
  31. ^ adegeo. "Preguntas frecuentes sobre compatibilidad con XBAP". learn.microsoft.com . Consultado el 15 de mayo de 2024 .
  32. ^ kexugit (9 de marzo de 2011). "IE9: XBAP deshabilitados en la zona de Internet". learn.microsoft.com . Consultado el 15 de mayo de 2024 .
  33. ^ Blog, Visual Studio (16 de febrero de 2010). "WPF en Visual Studio 2010 - Parte 1: Introducción". Blog de Visual Studio . Consultado el 22 de mayo de 2024 .
  34. ^ Blog, Microsoft Edge; Smith, Jerry (2 de julio de 2015). "Pasando a HTML5 Premium Media". Blog de Microsoft Edge . Consultado el 23 de mayo de 2024 .
  35. ^ Nombre de GitHub. "Silverlight 5 - Ciclo de vida de Microsoft". learn.microsoft.com . Consultado el 23 de mayo de 2024 .
  36. ^ "Avalonia UI - Marco de interfaz de usuario multiplataforma para .NET". Avalonia UI . Consultado el 16 de mayo de 2024 .
  37. ^ "Avalonia UI - Showcase". avaloniaui.net . Consultado el 23 de mayo de 2024 .
  38. ^ jwmsft (20 de octubre de 2022). «Plataforma XAML: aplicaciones para UWP». learn.microsoft.com . Consultado el 23 de mayo de 2024 .
  39. ^ davidbritch (25 de julio de 2023). «XAML - .NET MAUI». learn.microsoft.com . Consultado el 23 de mayo de 2024 .
  40. ^ Personal, CodeGuru (6 de abril de 2009). "Un recorrido por WPF en Visual Studio 2008". CodeGuru . Consultado el 23 de mayo de 2024 .
  41. ^ "Detalles de la descarga: Microsoft Visual Studio Code Name "Orcas" Community Technology Preview - WinFX™ Development Tools". 15 de abril de 2006. Archivado desde el original el 15 de abril de 2006. Consultado el 23 de mayo de 2024 .
  42. ^ adegeo (18 de agosto de 2022). "Compilar una aplicación: WPF .NET Framework". learn.microsoft.com . Consultado el 23 de mayo de 2024 .

Bibliografía

Enlaces externos