Compartir a través de


Introducción a Windows Presentation Foundation

Le damos la bienvenida a la Guía de escritorio para Windows Presentation Foundation (WPF), un marco de interfaz de usuario independiente de la resolución y usa un motor de representación basado en vectores, creado para aprovechar el hardware gráfico moderno. WPF proporciona un conjunto completo de características de desarrollo de aplicaciones que incluyen lenguaje de marcado extensible de aplicaciones (XAML), controles, enlace de datos, diseño, gráficos 2D y 3D, animación, estilos, plantillas, documentos, medios, texto y tipografía. WPF es parte de. NET, así que permite compilar aplicaciones que incorporan otros elementos de la API de .NET.

Hay dos implementaciones de WPF:

  1. Versión de .NET (esta guía):

    Una implementación de código abierto de WPF hospedada en GitHub, que se ejecuta en .NET. El diseñador XAML requiere, como mínimo, Visual Studio 2019 versión 16.8. Pero en función de la versión de .NET, es posible que tenga que usar una versión más reciente de Visual Studio.

    Aunque .NET es una tecnología multiplataforma, WPF solo se ejecuta en Windows.

  2. Versión de .NET Framework 4 :

    Implementación de .NET Framework de WPF compatible con Visual Studio 2019 y Visual Studio 2017.

    .NET Framework 4 es una versión de .NET solo para Windows y se considera un componente del sistema operativo Windows. Esta versión de WPF se distribuye con .NET Framework.

Esta introducción está pensada para los recién llegados y trata las principales funcionalidades y conceptos de WPF. Para obtener información sobre cómo crear una aplicación WPF, consulte Tutorial: Creación de una aplicación WPF.

Por qué actualizar desde .NET Framework

Al actualizar la aplicación de .NET Framework a .NET, se beneficiará de lo siguiente:

  • Mejor rendimiento
  • Nuevas API de .NET
  • Las mejoras más recientes en el lenguaje
  • Accesibilidad y confiabilidad mejoradas
  • Herramientas actualizadas y mucho más

Para obtener información sobre cómo actualizar la aplicación, consulte Actualización de una aplicación de escritorio wpF a .NET.

Programar con WPF

WPF existe como un subconjunto de tipos de .NET que, principalmente, se encuentran en el System.Windows espacio de nombres. Si ha creado previamente aplicaciones con .NET con frameworks como ASP.NET y Windows Forms, la experiencia fundamental de programación en WPF debería resultarle familiar.

  • Creación de instancias de clases
  • Configurar propiedades
  • Llamar a métodos
  • Gestionar eventos

WPF incluye más construcciones de programación que mejoran las propiedades y los eventos: propiedades de dependencia y eventos enrutados.

Marcado y código subyacente

WPF le permite desarrollar una aplicación con marcado y código subyacente, una experiencia con la que ASP.NET desarrolladores deben estar familiarizados. Por lo general, usas el marcado XAML para implementar la apariencia de una aplicación mientras usas lenguajes de programación administrados (código subyacente) para implementar su comportamiento. Esta separación de apariencia y comportamiento tiene las siguientes ventajas:

  • Los costos de desarrollo y mantenimiento se reducen porque el marcado específico de la apariencia no está estrechamente unido al código específico del comportamiento.

  • El desarrollo es más eficaz porque los diseñadores pueden implementar la apariencia de una aplicación simultáneamente con los desarrolladores que implementan el comportamiento de la aplicación.

  • La globalización y la localización de aplicaciones WPF se simplifican.

marcado

XAML es un lenguaje de marcado basado en XML que implementa la apariencia de una aplicación mediante declaración. Normalmente se usa para definir ventanas, cuadros de diálogo, páginas y controles de usuario, y para rellenarlos con controles, formas y gráficos.

En el ejemplo siguiente se usa XAML para implementar la apariencia de una ventana que contiene un solo botón:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    Title="Window with button"
    Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button">Click Me!</Button>

</Window>

En concreto, este XAML define una ventana y un botón mediante los Window elementos y Button . Cada elemento se configura con atributos, como el atributo Window del elemento Title para especificar el texto de la barra de título de la ventana. En tiempo de ejecución, WPF convierte los elementos y atributos definidos en marcado en instancias de clases de WPF. Por ejemplo, el Window elemento se convierte en una instancia de la Window clase cuya Title propiedad es el valor del Title atributo .

En la ilustración siguiente se muestra la interfaz de usuario (UI) definida por el XAML en el ejemplo anterior:

Ventana que contiene un botón

Dado que XAML está basado en XML, la interfaz de usuario que se compone con ella se ensambla en una jerarquía de elementos anidados que se conoce como árbol de elementos. El árbol de elementos proporciona una manera lógica e intuitiva de crear y administrar interfaces de usuario.

Código subyacente

El comportamiento principal de una aplicación es implementar la funcionalidad que responde a las interacciones del usuario. Por ejemplo, al hacer clic en un menú o botón, y llamar a la lógica empresarial y la lógica de acceso a datos en respuesta. En WPF, este comportamiento se implementa en el código asociado al marcado. Este tipo de código se conoce como código subyacente. En el ejemplo siguiente se muestra el marcado actualizado del ejemplo anterior y el código subyacente:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.AWindow"
    Title="Window with button"
    Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button" Click="button_Click">Click Me!</Button>

</Window>

El marcado actualizado define el xmlns:x espacio de nombres y lo asigna al esquema que agrega compatibilidad con los tipos de código subyacente. El x:Class atributo se usa para asociar una clase de código subyacente a este marcado XAML específico. Teniendo en cuenta que este atributo se declara en el <Window> elemento , la clase de código subyacente debe heredar de la Window clase .

using System.Windows;

namespace SDKSample
{
    public partial class AWindow : Window
    {
        public AWindow()
        {
            // InitializeComponent call is required to merge the UI
            // that is defined in markup with this class, including  
            // setting properties and registering event handlers
            InitializeComponent();
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            // Show message box when button is clicked.
            MessageBox.Show("Hello, Windows Presentation Foundation!");
        }
    }
}
Namespace SDKSample

    Partial Public Class AWindow
        Inherits System.Windows.Window

        Public Sub New()

            ' InitializeComponent call is required to merge the UI
            ' that is defined in markup with this class, including  
            ' setting properties and registering event handlers
            InitializeComponent()

        End Sub

        Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)

            ' Show message box when button is clicked.
            MessageBox.Show("Hello, Windows Presentation Foundation!")

        End Sub

    End Class

End Namespace

InitializeComponent se llama desde el constructor de la clase de código subyacente para combinar la interfaz de usuario definida en el marcado con la clase de código subyacente. (InitializeComponent se genera automáticamente cuando se compila su aplicación, por lo que no necesita implementarlo manualmente). La combinación de x:Class y InitializeComponent asegura que la implementación se inicialice correctamente cada vez que se crea.

Observe que en el marcado, el <Button> elemento definió un valor de button_Click para el Click atributo . Con el marcado y el código subyacente inicializados y trabajando juntos, el Click evento del botón se asigna automáticamente al button_Click método . Cuando se hace clic en el botón, se invoca el controlador de eventos y se muestra un cuadro de mensaje llamando al System.Windows.MessageBox.Show método .

En la ilustración siguiente se muestra el resultado cuando se hace clic en el botón:

Un cuadro de mensaje

Entrada y comandos

Los controles suelen detectar y responder a la entrada del usuario. El sistema de entrada wpF usa eventos directos y enrutados para admitir la entrada de texto, la administración del foco y el posicionamiento del mouse.

Las aplicaciones suelen tener requisitos de entrada complejos. WPF proporciona un sistema de comandos que separa las acciones de entrada del usuario del código que responde a esas acciones. El sistema de comandos permite que varios orígenes invoquen la misma lógica de comandos. Por ejemplo, tome las operaciones de edición comunes usadas por diferentes aplicaciones: Copiar, Cortar y Pegar. Estas operaciones se pueden invocar mediante diferentes acciones de usuario si se implementan mediante comandos.

Controles

Las experiencias de usuario que entrega el modelo de aplicación son controles construidos. En WPF, el control es un término paraguas que se aplica a una categoría de clases de WPF que tienen las siguientes características:

  • Hospedado en una ventana o en una página.
  • Tener una interfaz de usuario.
  • Implemente algún comportamiento.

Para obtener más información, vea Controles.

Controles WPF por función

Los controles WPF integrados se enumeran aquí:

Diseño

Al crear una interfaz de usuario, organiza los controles por ubicación y tamaño para formar un diseño. Un requisito clave de cualquier diseño es adaptarse a los cambios en la configuración de pantalla y tamaño de ventana. En lugar de forzar a escribir el código para adaptar un diseño en estas circunstancias, WPF proporciona un sistema de diseño extensible de primera clase para usted.

La piedra angular del sistema de diseño es un posicionamiento relativo, lo que aumenta la capacidad de adaptarse a las condiciones de ventana y visualización cambiantes. El sistema de diseño también administra la negociación entre controles para determinar el diseño. La negociación es un proceso de dos pasos: en primer lugar, un control indica a su primario qué ubicación y tamaño requiere. En segundo lugar, el elemento primario indica al control qué espacio puede tener.

El sistema de diseño se expone a controles secundarios a través de clases base de WPF. Para diseños comunes, como cuadrículas, apilamiento y acoplamiento, WPF incluye varios controles de diseño:

  • Canvas: Los controles hijo proporcionan su propio diseño.

  • DockPanel: Los controles secundarios se alinean a los bordes del panel.

  • Grid: los controles secundarios se colocan por filas y columnas.

  • StackPanel: Los controles secundarios se apilan verticalmente u horizontalmente.

  • VirtualizingStackPanel: Los controles secundarios se virtualizan y organizan en una sola línea que está orientada ya sea horizontal o verticalmente.

  • WrapPanel: los controles secundarios se colocan en orden de izquierda a derecha y se encapsulan en la línea siguiente cuando no hay suficiente espacio en la línea actual.

En el ejemplo siguiente se usa un DockPanel para diseñar varios controles TextBox:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.LayoutWindow"
    Title="Layout with the DockPanel" Height="143" Width="319">

  <!--DockPanel to layout four text boxes-->
  <DockPanel>
    <TextBox DockPanel.Dock="Top">Dock = "Top"</TextBox>
    <TextBox DockPanel.Dock="Bottom">Dock = "Bottom"</TextBox>
    <TextBox DockPanel.Dock="Left">Dock = "Left"</TextBox>
    <TextBox Background="White">This TextBox "fills" the remaining space.</TextBox>
  </DockPanel>

</Window>

DockPanel permite a los controles secundarios TextBox indicarle cómo organizarlos. Para ello, DockPanel implementa una Dock propiedad vinculada que se expone a los controles secundarios para permitir que cada uno de ellos especifique un estilo de acoplamiento.

Nota:

Una propiedad implementada por un control primario para su uso por controles secundarios es una construcción WPF denominada propiedad adjunta.

En la ilustración siguiente se muestra el resultado del marcado XAML en el ejemplo anterior:

Página de DockPanel

Vinculación de datos

La mayoría de las aplicaciones se crean para proporcionar a los usuarios los medios para ver y editar datos. En el caso de las aplicaciones WPF, el trabajo de almacenar y acceder a los datos ya lo proporcionan muchas bibliotecas de acceso a datos .NET diferentes, como SQL y Entity Framework Core. Una vez que se accede a los datos y se cargan en los objetos administrados de una aplicación, comienza el trabajo duro para las aplicaciones WPF. Básicamente, esto implica dos cosas:

  1. Copiar los datos de los objetos administrados en controles, donde los datos se pueden mostrar y editar.

  2. Asegurarse de que los cambios realizados en los datos mediante controles se copian de nuevo en los objetos administrados.

Para simplificar el desarrollo de aplicaciones, WPF proporciona un potente motor de enlace de datos para controlar automáticamente estos pasos. La unidad principal del motor de enlace de datos es la Binding clase , cuyo trabajo consiste en enlazar un control (el destino de enlace) a un objeto de datos (el origen de enlace). Esta relación se ilustra mediante la ilustración siguiente:

Diagrama de enlace de datos básico

WPF admite declarar vinculaciones directamente en el marcado de XAML. Por ejemplo, el siguiente código XAML enlaza la Text propiedad de TextBox a la Name propiedad de un objeto mediante la sintaxis XAML "{Binding ... }". Esto asume que hay un objeto de datos asignado a la propiedad DataContext de Window, con una propiedad Name.

<Window
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     x:Class="SDKSample.DataBindingWindow">

   <!-- Bind the TextBox to the data source (TextBox.Text to Person.Name) -->
   <TextBox Name="personNameTextBox" Text="{Binding Path=Name}" />

</Window>

El motor de enlace de datos de WPF proporciona más que solo enlace, proporciona validación, ordenación, filtrado y agrupación. Además, el enlace de datos admite el uso de plantillas de datos para crear una interfaz de usuario personalizada para los datos enlazados.

Para obtener más información, consulte Introducción al enlace de datos.

Gráficos y animación

WPF proporciona un amplio y flexible conjunto de características gráficas que tienen las siguientes ventajas:

  • Gráficos independientes de la resolución y independientes del dispositivo. La unidad básica de medida en el sistema de gráficos WPF es el píxel independiente del dispositivo, que es 1/96 de pulgada, y proporciona la base para la representación independiente de la resolución e independiente del dispositivo. Cada píxel independiente del dispositivo se escala automáticamente para que coincida con la configuración de puntos por pulgada (ppp) del sistema en el que se representa.

  • Precisión mejorada. El sistema de coordenadas WPF se mide con números de punto flotante de precisión doble en lugar de precisión simple. Las transformaciones y los valores de opacidad también se expresan como precisión doble. WPF también admite una amplia gama de colores (scRGB) y proporciona compatibilidad integrada para administrar entradas de diferentes espacios de color.

  • Compatibilidad avanzada con gráficos y animaciones. WPF simplifica la programación de gráficos mediante la administración de escenas de animación para usted; No es necesario preocuparse por el procesamiento de escenas, los bucles de representación y la interpolación bilineal. Además, WPF proporciona soporte para la detección de impactos y compatibilidad total con la composición alfa.

  • Aceleración de hardware. El sistema de gráficos WPF aprovecha el hardware gráfico para minimizar el uso de la CPU.

Gráficos en 2D

WPF proporciona una biblioteca de formas 2D comunes dibujadas por vectores, como los rectángulos y los puntos suspensivos. Las formas no son solo para mostrar; estas implementan muchas de las características que se esperan de los controles, incluida la entrada de teclado y ratón.

Las formas 2D proporcionadas por WPF cubren el conjunto estándar de formas básicas. Sin embargo, es posible que tenga que crear formas personalizadas para ayudar al diseño de una interfaz de usuario personalizada. WPF proporciona geometrías para crear una forma personalizada que se puede dibujar directamente, usar como pincel o usar para recortar otras formas y controles.

Para obtener más información, consulte Información general sobre geometría.

Un subconjunto de capacidades 2D de WPF incluye efectos visuales, como degradados, mapas de bits, dibujos, pintura con vídeos, rotación, escalado y distorsión. Estos efectos se logran con pinceles. En la ilustración siguiente se muestran algunos ejemplos:

Ilustración de diferentes pinceles

Para obtener más información, vea Visión general de los pinceles de WPF.

Representación 3D

WPF también incluye funcionalidades de representación 3D que se integran con gráficos 2D para permitir la creación de interfaces de usuario más interesantes e interesantes. Por ejemplo, en la ilustración siguiente se muestran imágenes 2D representadas en formas 3D:

Captura de pantalla de ejemplo de Visual3D

Para obtener más información, consulte Información general sobre gráficos 3D.

Animación

La compatibilidad con animaciones de WPF te permite hacer que los controles crezcan, agitar, girar y atenuar, para crear transiciones de página interesantes, etc. Puede animar la mayoría de las clases de WPF, incluso las clases personalizadas. En la ilustración siguiente se muestra una animación simple en acción:

Imágenes de un cubo animado

Para obtener más información, vea Información general sobre animaciones.

Texto y tipografía

Para proporcionar representación de texto de alta calidad, WPF ofrece las siguientes características:

  • Compatibilidad con fuentes OpenType.
  • Mejoras de ClearType.
  • Alto rendimiento que aprovecha la aceleración de hardware.
  • Integración del texto con elementos multimedia, gráficos y animación.
  • Soporte internacional de fuentes y mecanismos de respaldo.

Como demostración de la integración de texto con gráficos, en la ilustración siguiente se muestra la aplicación de decoraciones de texto:

Texto con varias decoraciones de texto

Para obtener más información, vea Tipografía en Windows Presentation Foundation.

Personalización de aplicaciones WPF

Hasta este punto, ha visto los principales bloques de creación de WPF para desarrollar aplicaciones:

  • El modelo de aplicación se usa para hospedar y entregar contenido de la aplicación, que consta principalmente de controles.
  • Para simplificar la organización de controles en una interfaz de usuario, se usa el sistema de diseño WPF.
  • Utilizas el enlace de los datos para reducir el trabajo de integración de la interfaz de usuario con los datos.
  • Para mejorar la apariencia visual de la aplicación, usa la amplia gama de gráficos, animaciones y soporte multimedia proporcionado por WPF.

A menudo, sin embargo, los conceptos básicos no son suficientes para crear y administrar una experiencia de usuario verdaderamente distinta y visualmente impresionante. Es posible que los controles de WPF estándar no se integren con la apariencia deseada de la aplicación. Es posible que los datos no se muestren de la manera más eficaz. Es posible que la experiencia general del usuario de la aplicación no sea adecuada para la apariencia predeterminada de los temas de Windows.

Por este motivo, WPF proporciona varios mecanismos para crear experiencias de usuario únicas.

Modelo de contenido

El propósito principal de la mayoría de los controles WPF es mostrar contenido. En WPF, el tipo y el número de elementos que pueden constituir el contenido de un control se denomina modelo de contenido del control. Algunos controles pueden contener un solo elemento y un tipo de contenido. Por ejemplo, el contenido de TextBox es un valor de cadena que se asigna a la propiedad Text.

Sin embargo, otros controles pueden contener varios elementos de diferentes tipos de contenido; el contenido de , Buttonespecificado por la Content propiedad , puede contener varios elementos, incluidos controles de diseño, texto, imágenes y formas.

Para obtener más información sobre los tipos de contenido admitidos por varios controles, vea Modelo de contenido de WPF.

Desencadenadores

Aunque el propósito principal del marcado XAML es implementar la apariencia de una aplicación, también puedes usar XAML para implementar algunos aspectos del comportamiento de una aplicación. Un ejemplo es el uso de desencadenadores para cambiar la apariencia de una aplicación en función de las interacciones del usuario. Para obtener más información, vea Estilos y plantillas.

Plantillas

Las interfaces de usuario predeterminadas para los controles WPF se suelen construir a partir de otros controles y formas. Por ejemplo, un Button se compone de controles ButtonChrome y ContentPresenter. ButtonChrome proporciona la apariencia del botón estándar, mientras que muestra ContentPresenter el contenido del botón, según lo especificado por la Content propiedad .

A veces, la apariencia predeterminada de un control puede entrar en conflicto con la apariencia general de una aplicación. En este caso, puede usar un ControlTemplate para cambiar la apariencia de la interfaz de usuario del control sin cambiar su contenido y comportamiento.

Por ejemplo, un Button genera el Click evento cuando se hace clic en él. Al cambiar la plantilla de un botón para mostrar una Ellipse forma, la apariencia visual del control ha cambiado, aunque la funcionalidad no. Todavía puede hacer clic en la parte visual del control y se genera el evento Click como se esperaba.

Un botón elíptico y una segunda ventana

Plantillas de datos

Mientras que una plantilla de control le permite especificar la apariencia de un control, una plantilla de datos le permite especificar la apariencia del contenido de un control. Las plantillas de datos se usan con frecuencia para mejorar cómo se muestran los datos enlazados. En la ilustración siguiente se muestra la apariencia predeterminada de un ListBox objeto enlazado a una colección de Task objetos, donde cada tarea tiene un nombre, una descripción y una prioridad:

Cuadro de lista con la apariencia predeterminada

La apariencia predeterminada es lo que cabría esperar de un ListBox. Sin embargo, la apariencia predeterminada de cada tarea contiene solo el nombre de la tarea. Para mostrar el nombre, la descripción y la prioridad de la tarea, se debe cambiar la apariencia predeterminada de los elementos de lista enlazados del control usando un ListBox. Este es un ejemplo de aplicación de una plantilla de datos que se creó para el Task objeto .

Cuadro de lista que usa una plantilla de datos

ListBox conserva su comportamiento y apariencia general y solo ha cambiado la apariencia del contenido que muestra el cuadro de lista.

Para más información, consulte Información general sobre plantillas de datos.

Estilos

Los estilos permiten a los desarrolladores y diseñadores estandarizar una apariencia determinada para su producto. WPF proporciona un modelo de estilo seguro, la base de la cual es el Style elemento . Los estilos pueden asignar valores de propiedad a los tipos. Se pueden aplicar automáticamente a todo según el tipo o los objetos individuales cuando se hace referencia a ellos. En el siguiente ejemplo se crea un estilo que establece el color de fondo de cada Button en la ventana a Orange.

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.StyleWindow"
    Title="Styles">

    <Window.Resources>
        <!-- Style that will be applied to all buttons for this window -->
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="Orange" />
            <Setter Property="BorderBrush" Value="Crimson" />
            <Setter Property="FontSize" Value="20" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="Margin" Value="5" />
        </Style>
    </Window.Resources>
    <StackPanel>

        <!-- This button will have the style applied to it -->
        <Button>Click Me!</Button>

        <!-- This label will not have the style applied to it -->
        <Label>Don't Click Me!</Label>

        <!-- This button will have the style applied to it -->
        <Button>Click Me!</Button>

    </StackPanel>
</Window>

Dado que este estilo tiene como destino todos los Button controles, el estilo se aplica automáticamente a todos los botones de la ventana, como se muestra en la ilustración siguiente:

Dos botones naranjas

Para obtener más información, vea Estilos y plantillas.

Recursos

Los controles de una aplicación deben compartir la misma apariencia, lo que puede incluir cualquier cosa, desde fuentes y colores de fondo para controlar plantillas, plantillas de datos y estilos. Puede usar la compatibilidad de WPF con los recursos de la interfaz de usuario para encapsular estos recursos en una sola ubicación para su reutilización.

En el ejemplo siguiente se define un color de fondo común compartido por y Button :Label

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.ResourcesWindow"
    Title="Resources Window">

  <!-- Define window-scoped background color resource -->
  <Window.Resources>
    <SolidColorBrush x:Key="defaultBackground" Color="Red" />
  </Window.Resources>

  <!-- Button background is defined by window-scoped resource -->
  <Button Background="{StaticResource defaultBackground}">One Button</Button>

  <!-- Label background is defined by window-scoped resource -->
  <Label Background="{StaticResource defaultBackground}">One Label</Label>
</Window>

Para obtener más información, vea Cómo definir y hacer referencia a un recurso de WPF.

Controles personalizados

Aunque WPF proporciona una serie de compatibilidad con la personalización, es posible que encuentre situaciones en las que los controles de WPF existentes no satisfagan las necesidades de la aplicación o de sus usuarios. Esto puede ocurrir cuando:

  • La interfaz de usuario que necesita no se puede crear personalizando la apariencia de las implementaciones de WPF existentes.
  • El comportamiento que necesita no es compatible (o no se admite fácilmente) con las implementaciones existentes de WPF.

Sin embargo, en este momento puede aprovechar uno de los tres modelos de WPF para crear un nuevo control. Cada modelo tiene como destino un escenario específico y requiere que el control personalizado se derive de una clase base de WPF determinada. Los tres modelos se enumeran aquí:

  • Modelo de control de usuario
    Un control personalizado se deriva de UserControl y se compone de uno o más controles.

  • Modelo de control Un control personalizado se deriva de Control y se usa para compilar implementaciones que separan su comportamiento de su apariencia mediante plantillas, al igual que la mayoría de los controles WPF. La derivación de Control le permite obtener más libertad para crear una interfaz de usuario personalizada que los controles de usuario, pero puede requerir más esfuerzo.

  • Modelo de Elemento de Framework.
    Un control personalizado se deriva de FrameworkElement cuando su apariencia se define mediante la lógica de representación personalizada (no las plantillas).

Para obtener más información sobre los controles personalizados, consulte Introducción a la creación de controles.

Consulte también