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 .
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]
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}!" ; } } }
MainWindow
En 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_Click
se llama al método, que está definido en el .xaml.cs
archivo. 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.
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]
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 Username
propiedad.
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]
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]
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]
WPF admite documentos paginados de forma nativa. Proporciona la DocumentViewer
clase que sirve para leer documentos con un diseño fijo. La FlowDocumentReader
clase 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]
Las características de Windows Forms son posibles mediante el uso de las clases ElementHost
y 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]
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]
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.
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]
WPF se utiliza para desarrollar Visual Studio , el IDE insignia de Microsoft , y se utilizó para desarrollar Microsoft Expression Blend . [33]
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]
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 .
{{cite book}}
: Enlace externo en |title=
( ayuda )