Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Bem-vindo ao Guia da Área de Trabalho para Windows Presentation Foundation (WPF), uma estrutura de interface do usuário que é independente de resolução e usa um mecanismo de renderização baseado em vetor, criado para aproveitar o hardware gráfico moderno. O WPF fornece um conjunto abrangente de recursos de desenvolvimento de aplicativos que incluem XAML (Extensible Application Markup Language), controles, associação de dados, layout, elementos gráficos 2D e 3D, animação, estilos, modelos, documentos, mídia, texto e tipografia. O WPF faz parte do .NET; portanto, você pode criar aplicativos que incorporam outros elementos da API .NET.
Há duas implementações do WPF:
Versão do .NET (este guia):
Uma implementação de software livre do WPF hospedada no GitHub, que é executada no .NET. O designer XAML requer, no mínimo, o Visual Studio 2019 versão 16.8. Mas, dependendo da sua versão do .NET, talvez seja necessário usar uma versão mais recente do Visual Studio.
Embora o .NET seja uma tecnologia multiplataforma, o WPF é executado apenas no Windows.
Versão do .NET Framework 4 :
A implementação do .NET Framework do WPF compatível com o Visual Studio 2019 e o Visual Studio 2017.
O .NET Framework 4 é uma versão somente do Windows do .NET e é considerado um componente do Sistema Operacional Windows. Esta versão do WPF é distribuída com o .NET Framework.
Essa visão geral destina-se aos recém-chegados e abrange os principais recursos e conceitos do WPF. Para saber como criar um aplicativo WPF, consulte Tutorial: Criar um novo aplicativo WPF.
Por que atualizar do .NET Framework
Ao atualizar seu aplicativo do .NET Framework para o .NET, você se beneficiará de:
- Melhor desempenho
- Novas APIs .NET
- Os aprimoramentos de idioma mais recentes
- Acessibilidade e confiabilidade aprimoradas
- Ferramentas atualizadas e muito mais
Para saber como atualizar seu aplicativo, consulte Como atualizar um aplicativo da área de trabalho do WPF para o .NET.
Programar com o WPF
O WPF existe como um subconjunto de tipos .NET localizados principalmente no System.Windows namespace. Se você já criou aplicativos com o .NET com estruturas como ASP.NET e Windows Forms, a programação básica em WPF deve ser familiar a você.
- Classes de instanciação
- Definir propriedades
- Métodos de chamada
- Manipular eventos
O WPF inclui mais construtos de programação que aprimoram propriedades e eventos: propriedades de dependência e eventos roteados.
Marcação e code-behind
O WPF permite que você desenvolva um aplicativo usando marcação e code-behind, uma experiência com a qual desenvolvedores de ASP.NET devem estar familiarizados. Geralmente, você usa a marcação XAML para implementar a aparência de um aplicativo usando linguagens de programação gerenciadas (code-behind) para implementar seu comportamento. Essa separação de aparência e comportamento tem os seguintes benefícios:
Os custos de desenvolvimento e manutenção são reduzidos porque a marcação específica da aparência não está fortemente associada ao código específico do comportamento.
O desenvolvimento é mais eficiente porque os designers podem implementar a aparência de um aplicativo simultaneamente com desenvolvedores que estão implementando o comportamento do aplicativo.
A globalização e a localização para aplicativos WPF são simplificadas.
Marcação
XAML é uma linguagem de marcação baseada em XML que implementa declarativamente a aparência de um aplicativo. Normalmente, você o usa para definir janelas, caixas de diálogo, páginas e controles de usuário e preenchê-los com controles, formas e elementos gráficos.
O exemplo a seguir usa XAML para implementar a aparência de uma janela que contém um único botão:
<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>
Especificamente, esse XAML define uma janela e um botão usando os elementos Window
e Button
. Cada elemento é configurado com atributos, como o Window
atributo do Title
elemento para especificar o texto da barra de título da janela. Em tempo de execução, o WPF converte os elementos e atributos definidos na marcação em instâncias de classes WPF. Por exemplo, o Window
elemento é convertido em uma instância da Window classe cuja Title propriedade é o valor do Title
atributo.
A figura a seguir mostra a interface do usuário definida pelo XAML no exemplo anterior:
Como o XAML é baseado em XML, a interface do usuário que você compõe com ela é montada em uma hierarquia de elementos aninhados que é conhecida como uma árvore de elementos. A árvore de elementos fornece uma maneira lógica e intuitiva de criar e gerenciar interfaces do usuário.
Código subjacente
O comportamento principal de um aplicativo é implementar a funcionalidade que responde às interações do usuário. Por exemplo, clicar em um menu ou botão e chamar lógica de negócios e lógica de acesso a dados em resposta. No WPF, esse comportamento é implementado no código associado à marcação. Esse tipo de código é conhecido como code-behind. O exemplo a seguir mostra o código atualizado do exemplo anterior e o código subjacente:
<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>
A marcação atualizada define o namespace xmlns:x
e o mapeia para o esquema que adiciona suporte para os tipos de código de fundo. O x:Class
atributo é usado para associar uma classe code-behind a essa marcação XAML específica. Considerando que esse atributo é declarado no <Window>
elemento, a classe code-behind deve herdar da Window
classe.
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
é chamado pelo construtor da classe code-behind para integrar a interface do usuário definida na marcação com a classe code-behind. (InitializeComponent
é gerado para você quando seu aplicativo é criado, e é por isso que você não precisa implementá-lo manualmente.) A combinação de x:Class
e InitializeComponent
garantir que sua implementação seja inicializada corretamente sempre que for criada.
Observe que, na marcação, o <Button>
elemento definiu um valor button_Click
para o Click
atributo. Com a marcação e o code-behind inicializados e trabalhando juntos, o evento Click do botão é mapeado automaticamente para o método button_Click
. Quando o botão é clicado, o manipulador de eventos é invocado e uma caixa de mensagem é exibida chamando o System.Windows.MessageBox.Show método.
A figura a seguir mostra o resultado quando o botão é clicado:
Entrada e comandos
Os controles geralmente detectam e respondem à entrada do usuário. O sistema de entrada do WPF usa eventos diretos e roteado para dar suporte à entrada de texto, ao gerenciamento de foco e ao posicionamento do mouse.
Os aplicativos geralmente têm requisitos de entrada complexos. O WPF fornece um sistema de comandos que separa as ações de entrada do usuário do código que responde a essas ações. O sistema de comandos permite que várias fontes invoquem a mesma lógica de comando. Por exemplo, use as operações de edição comuns usadas por diferentes aplicativos: Copiar, Recortar e Colar. Essas operações podem ser invocadas usando ações de usuário diferentes se forem implementadas usando comandos.
Controles
As experiências do usuário que são entregues pelo modelo de aplicativo são controles construídos. No WPF, o controle é um termo guarda-chuva que se aplica a uma categoria de classes WPF que têm as seguintes características:
- Hospedado em uma janela ou em uma página.
- Tenha uma interface do usuário.
- Implemente algum comportamento.
Para obter mais informações, consulte Controles.
Controles do WPF por função
Os controles internos do WPF estão listados aqui:
Botões: Button e RepeatButton.
Exibição e seleção de data: Calendar e DatePicker.
Caixas de diálogo: OpenFileDialog, PrintDialoge SaveFileDialog.
Tinta Digital: InkCanvas e InkPresenter.
Documentos: DocumentViewer, , FlowDocumentPageViewer, FlowDocumentReader, FlowDocumentScrollViewere StickyNoteControl.
Entrada: TextBox, RichTextBoxe PasswordBox.
Layout: Border, BulletDecorator, , Canvas, DockPanel, Expander, , Grid, GridView, GridSplitter, GroupBox, , Panel, ResizeGrip, Separator, ScrollBar, , ScrollViewer, StackPanel, , Thumb, Viewbox, , VirtualizingStackPanel, Windowe WrapPanel.
Mídia: Image, MediaElemente SoundPlayerAction.
Menus: ContextMenu, Menue ToolBar.
Navegação: Frame, Hyperlink, , Page, NavigationWindowe TabControl.
Seleção: CheckBox, ComboBox, , ListBox, RadioButtone Slider.
Informações do usuário: AccessText, , Label, Popup, ProgressBar, StatusBar, TextBlocke ToolTip.
Esquema
Ao criar uma interface do usuário, você organiza seus controles por local e tamanho para formar um layout. Um requisito fundamental de qualquer layout é adaptar-se às alterações no tamanho da janela e nas configurações de exibição. Em vez de forçar você a escrever o código para adaptar um layout nessas circunstâncias, o WPF fornece um sistema de layout extensível de primeira classe para você.
A pedra angular do sistema de layout é o posicionamento relativo, que aumenta a capacidade de se adaptar às condições de alteração de janela e exibição. O sistema de layout também gerencia a negociação entre controles para determinar o layout. A negociação é um processo de duas etapas: primeiro, um controle informa ao pai qual local e tamanho ele requer. Em segundo lugar, o pai informa ao controle qual espaço ele pode ter.
O sistema de layout é exposto a controles filho por meio de classes base do WPF. Para layouts comuns, como grades, empilhamento e encaixe, o WPF inclui vários controles de layout:
Canvas: os controles filho fornecem seu próprio layout.
DockPanel: os controles filho são alinhados às bordas do painel.
Grid: os controles filho são posicionados por linhas e colunas.
StackPanel: os controles filho são empilhados vertical ou horizontalmente.
VirtualizingStackPanel: os controles filho são virtualizados e organizados em uma única linha orientada horizontal ou verticalmente.
WrapPanel: os controles filho são posicionados na ordem da esquerda para a direita e encapsulados para a próxima linha quando não há espaço suficiente na linha atual.
O exemplo a seguir usa um DockPanel para definir vários TextBox controles:
<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>
O DockPanel permite que os controles filho TextBox informem como organizá-los. O DockPanel implementa uma propriedade anexada Dock
que é exposta aos controles filho para permitir que cada um deles especifique um estilo de encaixe.
Observação
"Uma propriedade que é implementada por um controle principal para ser utilizada por controles subordinados é uma construção do WPF chamada propriedade anexada."
A figura a seguir mostra o resultado da marcação XAML no exemplo anterior:
Vinculação de dados
A maioria dos aplicativos é criada para fornecer aos usuários os meios para exibir e editar dados. Para aplicativos WPF, o trabalho de armazenar e acessar dados já é fornecido por muitas bibliotecas diferentes de acesso a dados do .NET, como SQL e Entity Framework Core. Depois que os dados são acessados e carregados nos objetos gerenciados de um aplicativo, o trabalho árduo para aplicativos WPF começa. Essencialmente, isso envolve duas coisas:
Copiando os dados dos objetos gerenciados em controles, onde os dados podem ser exibidos e editados.
Garantir que as alterações feitas nos dados usando controles sejam copiadas de volta para os objetos gerenciados.
Para simplificar o desenvolvimento de aplicativos, o WPF fornece um poderoso mecanismo de associação de dados para lidar automaticamente com essas etapas. A unidade principal do mecanismo de associação de dados é a Binding classe, cujo trabalho é associar um controle (o destino de associação) a um objeto de dados (a fonte de associação). Essa relação é ilustrada pela seguinte figura:
O WPF dá suporte à declaração de associações diretamente na marcação XAML. Por exemplo, o código XAML a seguir associa a propriedade Text do TextBox à propriedade Name
de um objeto usando a sintaxe XAML "{Binding ... }
". Isso pressupõe que existe um objeto de dados atribuído à propriedade DataContext de Window
, que possui uma propriedade 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>
O mecanismo de associação de dados do WPF fornece mais do que apenas associação, fornece validação, classificação, filtragem e agrupamento. Além disso, a associação de dados dá suporte ao uso de modelos de dados para criar uma interface do usuário personalizada para dados associados.
Para obter mais informações, consulte a visão geral da associação de dados.
Elementos gráficos & animação
O WPF fornece um conjunto extensivo e flexível de recursos gráficos que têm os seguintes benefícios:
Elementos gráficos independentes de resolução e independentes do dispositivo. A unidade básica de medida no sistema gráfico do WPF é o pixel independente do dispositivo, que é 1/96 de polegada, e fornece a base para renderização independente de resolução e independente de dispositivo. Cada pixel independente do dispositivo é dimensionado automaticamente para corresponder à configuração de pontos por polegada (dpi) do sistema em que ele é renderizado.
Precisão aprimorada. O sistema de coordenadas WPF é medido com números de ponto flutuante de precisão dupla em vez de precisão única. Transformações e valores de opacidade também são expressos como precisão dupla. O WPF também dá suporte a uma gama de cores ampla (scRGB) e fornece suporte integrado para gerenciar entradas de diferentes espaços de cores.
Suporte avançado a elementos gráficos e animação. O WPF simplifica a programação gráfica gerenciando cenas de animação para você; não é necessário se preocupar com processamento de cena, loops de renderização e interpolação bilinear. Além disso, o WPF fornece suporte a detecção de colisões e suporte completo à composição com alfa.
Aceleração de hardware. O sistema gráfico do WPF aproveita o hardware gráfico para minimizar o uso da CPU.
Elementos gráficos 2D
O WPF fornece uma biblioteca de formas 2D comuns desenhadas por vetor, como retângulos e elipses. As formas não são apenas para exibição; as formas implementam muitos dos recursos que você espera dos controles, incluindo entrada de teclado e mouse.
As formas 2D fornecidas pelo WPF abrangem o conjunto padrão de formas básicas. No entanto, talvez seja necessário criar formas personalizadas para ajudar no design de uma interface do usuário personalizada. O WPF fornece geometrias para criar uma forma personalizada que pode ser desenhada diretamente, usada como um pincel ou usada para recortar outras formas e controles.
Para obter mais informações, consulte a visão geral da Geometria.
Um subconjunto de recursos do WPF 2D inclui efeitos visuais, como gradientes, bitmaps, desenhos, pintura com vídeos, rotação, dimensionamento e distorção. Esses efeitos são todos obtidos com pincéis. A figura a seguir mostra alguns exemplos:
Para obter mais informações, consulte a visão geral dos pincéis do WPF.
Renderização 3D
O WPF também inclui recursos de renderização 3D que se integram a elementos gráficos 2D para permitir a criação de interfaces de usuário mais interessantes e interessantes. Por exemplo, a figura a seguir mostra imagens 2D renderizadas em formas 3D:
Para obter mais informações, consulte a visão geral dos gráficos 3D.
Animação
O suporte à animação do WPF permite que você faça com que os controles cresçam, agitem, girem e esmaeçam para criar transições de página interessantes e muito mais. Você pode animar a maioria das classes do WPF, até mesmo classes personalizadas. A figura a seguir mostra uma animação simples em ação:
Para obter mais informações, consulte a visão geral da animação.
Texto e tipografia
Para fornecer renderização de texto de alta qualidade, o WPF oferece os seguintes recursos:
- Suporte à fonte OpenType.
- Aprimoramentos ClearType.
- Alto desempenho que aproveita a aceleração de hardware.
- Integração do texto com mídia, elementos gráficos e animação.
- Suporte internacional a fontes e mecanismos de fallback.
Como demonstração de integração de texto com elementos gráficos, a figura a seguir mostra a aplicação de decorações de texto:
Para obter mais informações, consulte Tipografia no Windows Presentation Foundation.
Personalizar aplicativos WPF
Até agora, você viu os principais blocos de construção do WPF para desenvolver aplicativos:
- Você usa o modelo de aplicativo para hospedar e fornecer conteúdo do aplicativo, que consiste principalmente em controles.
- Para simplificar a disposição de controles em uma interface do usuário, use o sistema de layout do WPF.
- Você usa a associação de dados para reduzir o trabalho de integração da interface do usuário com os dados.
- Para aprimorar a aparência visual do aplicativo, use o amplo intervalo de elementos gráficos, animação e suporte à mídia fornecidos pelo WPF.
Muitas vezes, porém, as noções básicas não são suficientes para criar e gerenciar uma experiência de usuário verdadeiramente distinta e visualmente impressionante. Os controles padrão do WPF podem não se integrar à aparência desejada do aplicativo. Os dados podem não ser exibidos da maneira mais eficaz. A experiência geral do usuário do aplicativo pode não ser adequada para a aparência padrão dos temas do Windows.
Por esse motivo, o WPF fornece vários mecanismos para criar experiências exclusivas do usuário.
Modelo de conteúdo
A principal finalidade da maioria dos controles do WPF é exibir conteúdo. No WPF, o tipo e o número de itens que podem constituir o conteúdo de um controle são chamados de modelo de conteúdo do controle. Alguns controles podem conter um único item e um tipo de conteúdo. Por exemplo, o conteúdo de um TextBox é um valor de cadeia de caracteres atribuído à Text propriedade.
Outros controles, no entanto, podem conter vários itens de diferentes tipos de conteúdo; o conteúdo de um Button, especificado pela Content propriedade, pode conter vários itens, incluindo controles de layout, texto, imagens e formas.
Para obter mais informações sobre os tipos de conteúdo compatíveis com vários controles, consulte o modelo de conteúdo do WPF.
Gatilhos
Embora a principal finalidade da marcação XAML seja implementar a aparência de um aplicativo, você também pode usar XAML para implementar alguns aspectos do comportamento de um aplicativo. Um exemplo é o uso de gatilhos para alterar a aparência de um aplicativo com base nas interações do usuário. Para obter mais informações, consulte Estilos e modelos.
Modelos
As interfaces de usuário padrão para controles WPF normalmente são construídas a partir de outros controles e formas. Por exemplo, um Button é composto por controles tanto de ButtonChrome quanto de ContentPresenter. O ButtonChrome fornece a aparência padrão do botão, enquanto o ContentPresenter exibe o conteúdo do botão, especificado pela propriedade Content.
Às vezes, a aparência padrão de um controle pode entrar em conflito com a aparência geral de um aplicativo. Nesse caso, você pode usar um ControlTemplate para alterar a aparência da interface do usuário do controle sem alterar seu conteúdo e comportamento.
Por exemplo, um Button aciona o evento Click quando ele é clicado. Ao alterar o modelo de um botão para exibir uma Ellipse forma, a aparência do controle foi alterada, mas a funcionalidade não. Você ainda pode clicar no aspecto visual do controle e o evento Click é gerado conforme esperado.
Modelos de dados
Enquanto um modelo de controle permite especificar a aparência de um controle, um modelo de dados permite especificar a aparência do conteúdo de um controle. Os modelos de dados são frequentemente usados para aprimorar a forma como os dados associados são exibidos. A figura a seguir mostra a aparência padrão de um ListBox associado a uma coleção de Task
objetos, em que cada tarefa tem um nome, uma descrição e uma prioridade:
A aparência padrão é o que você esperaria de um ListBox. No entanto, a aparência padrão de cada tarefa contém apenas o nome da tarefa. Para mostrar o nome, a descrição e a prioridade da tarefa, a aparência padrão dos ListBox itens de lista associada do controle deve ser alterada usando um DataTemplate. Aqui está um exemplo de aplicação de um modelo de dados que foi criado para o Task
objeto.
O ListBox mantém seu comportamento e aparência geral e apenas a aparência do conteúdo exibido pela caixa de listagem foi alterada.
Para obter mais informações, consulte a visão geral da modelagem de dados.
Estilos
Os estilos permitem que desenvolvedores e designers padronizam uma aparência específica para seu produto. O WPF fornece um modelo de estilo forte, a base do qual é o Style elemento. Os estilos podem aplicar valores de propriedade a tipos. Eles podem ser aplicados automaticamente a tudo, de acordo com o tipo ou aos objetos individuais quando são referenciados. O exemplo a seguir cria um estilo que define a cor da tela de fundo para cada Button uma das janelas como 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>
Como esse estilo tem como destino todos os Button controles, o estilo é aplicado automaticamente a todos os botões na janela, conforme mostrado na figura a seguir:
Para obter mais informações, consulte Estilos e modelos.
Recursos
Os controles em um aplicativo devem compartilhar a mesma aparência, que pode incluir qualquer coisa, desde fontes e cores de plano de fundo até controle de modelos, modelos de dados e estilos. Você pode usar o suporte do WPF para recursos de interface do usuário para encapsular esses recursos em um único local para reutilização.
O exemplo a seguir define uma cor de plano de fundo comum que é compartilhada por um Button e um 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 obter mais informações, consulte Como definir e referenciar um recurso do WPF.
Controles personalizados
Embora o WPF forneça uma série de suporte de personalização, você pode encontrar situações em que os controles WPF existentes não atendem às necessidades do aplicativo ou de seus usuários. Isso pode ocorrer quando:
- A interface do usuário necessária não pode ser criada personalizando a aparência das implementações existentes do WPF.
- O comportamento necessário não tem suporte (ou não é facilmente suportado) por implementações existentes do WPF.
Neste ponto, no entanto, você pode aproveitar um dos três modelos do WPF para criar um novo controle. Cada modelo é direcionado a um cenário específico e exige que seu controle personalizado seja derivado de uma classe base específica do WPF. Os três modelos estão listados aqui:
Modelo de controle de usuário
Um controle personalizado deriva de UserControl e é composto por um ou mais outros controles.Modelo de controle Um controle personalizado deriva Control e é usado para criar implementações que separam seu comportamento de sua aparência usando modelos, assim como a maioria dos controles do WPF. Derivar de Control permite mais liberdade para criar uma interface de usuário personalizada do que controles de usuário, mas pode exigir mais esforço.
Modelo de Elemento de Framework.
Um controle personalizado deriva de FrameworkElement quando sua aparência é definida pela lógica de renderização personalizada (não por modelos).
Para obter mais informações sobre controles personalizados, consulte a visão geral da criação de controle.
Consulte também
- Tutorial: Criar um novo aplicativo WPF
- Migrar um aplicativo WPF para o .NET
- Visão geral das janelas do WPF
- visão geral da associação de dados
- Visão geral do XAML
.NET Desktop feedback