Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Bem-vindo ao Desktop Guide for 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 Extensible Application Markup Language (XAML), controles, vinculação de dados, layout, 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 do .NET.
Existem duas implementações do WPF:
Versão do .NET (este guia):
Uma implementação de código aberto do WPF hospedado no GitHub, que é executado em .NET. O designer XAML exige, no mínimo, o Visual Studio 2019 versão 16.8. Mas, dependendo da sua versão do .NET, você pode ser obrigado a usar uma versão mais recente do Visual Studio.
Embora o .NET seja uma tecnologia multiplataforma, o WPF só é executado no Windows.
Versão do .NET Framework 4 :
A implementação do .NET Framework do WPF que é suportada pelo Visual Studio 2019 e Visual Studio 2017.
O .NET Framework 4 é uma versão somente para Windows do .NET e é considerado um componente do Sistema Operacional Windows. Esta versão do WPF é distribuída com o .NET Framework.
Esta 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
- As mais recentes melhorias linguísticas
- Acessibilidade e fiabilidade melhoradas
- Ferramentas atualizadas e muito mais
Para saber como atualizar seu aplicativo, consulte Como atualizar um aplicativo de desktop WPF para .NET.
Programa com WPF
WPF existe como um subconjunto de tipos .NET que estão, principalmente localizados no System.Windows namespace. Se já criou aplicações com .NET com frameworks como ASP.NET e Windows Forms, a experiência fundamental de programação em WPF deve ser-lhe familiar.
- Instanciar classes
- Definir as propriedades
- Métodos de chamada
- Gerir eventos
O WPF inclui mais construções de programação que aprimoram propriedades e eventos: propriedades de dependência e eventos roteados.
A marcação e o código por trás
O WPF permite que desenvolvas uma aplicação usando tanto marcação como code-behind, uma experiência com a qual os desenvolvedores de ASP.NET deverão estar familiarizados. Geralmente, você usa a marcação XAML para implementar a aparência de um aplicativo enquanto usa linguagens de programação gerenciadas (code-behind) para implementar seu comportamento. Esta separação entre 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á intimamente ligada ao código específico do comportamento.
O desenvolvimento é mais eficiente porque os designers podem implementar a aparência de um aplicativo simultaneamente com os desenvolvedores que estão implementando o comportamento do aplicativo.
A globalização e a localização de aplicativos WPF são simplificadas.
Marcação
XAML é uma linguagem de marcação baseada em XML que implementa a aparência de um aplicativo declarativamente. Normalmente, você o usa para definir janelas, caixas de diálogo, páginas e controles de usuário e para preenchê-los com controles, formas e 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 Window
elementos 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 (UI) definida pelo XAML no exemplo anterior:
Como o XAML é baseado em XML, a interface do usuário que você compõe com ele é montada em uma hierarquia de elementos aninhados conhecida como árvore de elementos. A árvore de elementos fornece uma maneira lógica e intuitiva de criar e gerenciar interfaces do usuário.
Código associado
O principal comportamento 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 a lógica de negócios e a lógica de acesso a dados em resposta. No WPF, esse comportamento é implementado no código associado à marcação. Este tipo de código é conhecido como "código por detrás". O exemplo a seguir mostra a marcação atualizada do exemplo anterior e o code-behind:
<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 mapeia-o para o esquema que adiciona suporte aos tipos de code-behind. O x:Class
atributo é usado para associar uma classe code-behind a essa marcação XAML específica. Considerando que este atributo é declarado no elemento <Window>
, a classe code-behind deve herdar da classe Window
.
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 mesclar a UI que é definida na marcação com a classe code-behind.
InitializeComponent
( é gerado para você quando seu aplicativo é construído, 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 de button_Click
para o Click
atributo. Com a marcação e o code-behind inicializados e trabalhando juntos, o Click evento para o botão é automaticamente mapeado para o button_Click
método. 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
Na maioria das vezes, os controles detetam e respondem à entrada do usuário. O sistema de entrada WPF usa eventos diretos e roteados para oferecer suporte à entrada de texto, gerenciamento de foco e posicionamento do mouse.
Os aplicativos geralmente têm requisitos de entrada complexos. O WPF fornece um sistema de comando 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, considere as operações de edição comuns usadas por diferentes aplicativos: Copiar, Recortar e Colar. Essas operações podem ser invocadas usando diferentes ações do usuário se forem implementadas usando comandos.
Controlos
As experiências do usuário que são fornecidas pelo modelo de aplicativo são controles construídos. No WPF, controle é um termo abrangente que se aplica a uma categoria de classes WPF que têm as seguintes características:
- Hospedado em uma janela ou uma página.
- Ter uma interface de usuário.
- Implemente algum comportamento.
Para obter mais informações, consulte Controls.
Controles WPF por função
Os controles WPF internos 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, FlowDocumentScrollViewer, e StickyNoteControl.
Entrada: TextBox, RichTextBox, e PasswordBox.
Layout: Border, BulletDecorator, Canvas, DockPanel, Expander, Grid, GridView, GridSplitter, GroupBox, Panel, ResizeGrip, Separator, ScrollBar, ScrollViewer, StackPanel, Thumb, Viewbox, VirtualizingStackPanel, Window e WrapPanel.
Meios de comunicação: Image, MediaElement, e SoundPlayerAction.
Menus: ContextMenu, Menu, e ToolBar.
Navegação: Frame, Hyperlink, Page, NavigationWindow, e TabControl.
Seleção: CheckBox, ComboBox, ListBox, RadioButton, e Slider.
Informações do usuário: AccessText, Label, Popup, ProgressBar, StatusBar, TextBlock, e ToolTip.
Esquema
Ao criar uma interface de usuário, você organiza seus controles por local e tamanho para formar um layout. Um requisito fundamental de qualquer layout é adaptar-se às mudanças no tamanho da janela e nas configurações de exibição. Em vez de forçá-lo 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, o que aumenta a capacidade de se adaptar às mudanças nas condições de janela e exibição. O sistema de layout também gerencia a negociação entre os 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 diz ao controle que espaço ele pode ter.
O sistema de layout é exposto a controles filho por meio de classes WPF base. 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 na próxima linha quando não há espaço suficiente na linha atual.
O exemplo a seguir usa a DockPanel para dispor 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 a criança TextBox controla para dizer-lhe como organizá-los. Para fazer isso, o DockPanel implementa uma Dock
propriedade anexada que é exposta aos controles filho para permitir que cada um deles especifique um estilo de dock.
Observação
Uma propriedade implementada por um controle pai para ser utilizada por controles filho é uma construção na 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 são criados para fornecer aos usuários os meios para visualizar e editar dados. Para aplicativos WPF, o trabalho de armazenar e acessar dados já é fornecido por muitas bibliotecas de acesso a dados .NET diferentes, 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, isto envolve duas coisas:
Copiar os dados dos objetos gerenciados para 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 vinculação de dados para lidar automaticamente com essas etapas. A unidade central do mecanismo de vinculação de dados é a Binding classe, cujo trabalho é vincular um controle (o destino de vinculação) a um objeto de dados (a fonte de vinculação). Esta relação é ilustrada pela seguinte figura:
O WPF oferece suporte à declaração de associações na marcação XAML diretamente. Por exemplo, o código XAML a seguir vincula a propriedade Text de TextBox à propriedade Name
de um objeto usando a sintaxe XAML "{Binding ... }
". Isso pressupõe que há um objeto de dados definido na propriedade DataContext de Window
com 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 vinculação de dados WPF fornece mais do que apenas vinculação, ele fornece validação, classificação, filtragem e agrupamento. Além disso, a vinculação de dados suporta o uso de modelos de dados para criar uma interface de usuário personalizada para dados vinculados.
Para obter mais informações, consulte Visão geral da vinculação de dados.
Gráficos & animação
O WPF fornece um conjunto extenso e flexível de recursos gráficos que têm os seguintes benefícios:
Gráficos independentes da resolução e do dispositivo. A unidade básica de medida no sistema gráfico WPF é o pixel independente do dispositivo, que é de 1/96 de polegada, e fornece a base para renderização independente da resolução e do dispositivo. Cada pixel independente do dispositivo é dimensionado automaticamente para corresponder à configuração de pontos por polegada (dpi) do sistema em que é renderizado.
Precisão melhorada. O sistema de coordenadas WPF é medido com números de ponto flutuante de precisão dupla em vez de precisão única. As transformações e os valores de opacidade também são expressos como dupla precisão. O WPF também suporta uma ampla gama de cores (scRGB) e fornece suporte integrado para gerenciar entradas de diferentes espaços de cores.
Suporte avançado a gráficos e animações. WPF simplifica a programação gráfica gerenciando cenas de animação para você; Não há necessidade de se preocupar com processamento de cena, loops de renderização e interpolação bilinear. Além disso, o WPF fornece suporte para detecção de colisões e suporte completo para composição alfa.
Aceleração de hardware. O sistema gráfico WPF tira proveito do hardware gráfico para minimizar o uso da CPU.
Gráficos 2D
O WPF fornece uma biblioteca de formas 2D comuns desenhadas por vetores, 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 a entrada de teclado e mouse.
As formas 2D fornecidas pelo WPF cobrem o conjunto padrão de formas básicas. No entanto, talvez seja necessário criar formas personalizadas para ajudar no design de uma interface de usuário personalizada. O WPF fornece geometrias para criar uma forma personalizada que pode ser desenhada diretamente, usada como pincel ou usada para recortar outras formas e controles.
Para obter mais informações, consulte Visão geral de geometria.
Um subconjunto de recursos do WPF 2D inclui efeitos visuais, como gradientes, bitmaps, desenhos, pintura com vídeos, rotação, dimensionamento e inclinação. Estes efeitos são todos alcançados com pincéis. A figura a seguir mostra alguns exemplos:
Para obter mais informações, consulte Visão geral dos pincéis do WPF.
Renderização 3D
O WPF também inclui recursos de renderização 3D que se integram com gráficos 2D para permitir a criação de interfaces de usuário mais interessantes e emocionantes. Por exemplo, a figura a seguir mostra imagens 2D renderizadas em formas 3D:
Para obter mais informações, consulte Visão geral de gráficos 3D.
Animação
O suporte à animação WPF permite que você faça os controles crescerem, agitarem, girarem e desvanecerem, para criar transições de página interessantes e muito mais. Você pode animar a maioria das classes WPF, até mesmo classes personalizadas. A figura a seguir mostra uma animação simples em ação:
Para obter mais informações, consulte 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 a fontes OpenType.
- Aprimoramentos do ClearType.
- Alto desempenho que tira proveito da aceleração de hardware.
- Integração de texto com mídia, gráficos e animação.
- Suporte internacional a fontes e mecanismos alternativos.
Como demonstração da integração de texto com 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é este ponto, você viu os principais blocos de construção do WPF para o desenvolvimento de aplicativos:
- Você usa o modelo de aplicativo para hospedar e fornecer conteúdo do aplicativo, que consiste principalmente em controles.
- Para simplificar a organização de controles em uma interface de usuário, use o sistema de layout WPF.
- Você usa a vinculação de dados para reduzir o trabalho de integração da interface do usuário com os dados.
- Para melhorar a aparência visual do seu aplicativo, você usa a gama abrangente de gráficos, animação e suporte de mídia fornecido pelo WPF.
Muitas vezes, porém, o básico não é suficiente para criar e gerenciar uma experiência de usuário verdadeiramente distinta e visualmente impressionante. Os controles WPF padrão podem não se integrar com a aparência desejada do seu aplicativo. Os dados podem não ser exibidos da maneira mais eficaz. A experiência geral do usuário do seu 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 de usuário únicas.
Modelo de conteúdo
O principal objetivo da maioria dos controles WPF é exibir conteúdo. No WPF, o tipo e o número de itens que podem constituir o conteúdo de um controle é chamado de modelo de conteúdo do controle. Alguns controles podem conter um único item e tipo de conteúdo. Por exemplo, o conteúdo de a 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 suportados por vários controles, consulte Modelo de conteúdo WPF.
Acionadores
Embora o objetivo principal da marcação XAML seja implementar a aparência de um aplicativo, você também pode usar XAML para implementar alguns aspetos 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 são normalmente construídas a partir de outros controles e formas. Por exemplo, um Button é composto por controlos ButtonChrome e ContentPresenter. O ButtonChrome fornece a aparência padrão do botão, enquanto o ContentPresenter exibe o conteúdo do botão, conforme especificado pela Content propriedade.
À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 a ControlTemplate para alterar a aparência da interface do usuário do controle sem alterar seu conteúdo e comportamento.
Por exemplo, um Button gera o evento Click quando é clicado. Ao alterar o modelo de um botão para exibir uma Ellipse forma, o visual do aspeto do controle mudou, mas a funcionalidade não. Você ainda pode clicar no aspeto visual do controlador 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 melhorar a forma como os dados vinculados são exibidos. A figura a seguir mostra a aparência padrão de um ListBox que está vinculado a uma coleção de Task
objetos, onde cada tarefa tem um nome, uma descrição e uma prioridade:
A aparência padrão é aquilo que seria de esperar 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 itens da lista associada do controlo ListBox 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 que está sendo exibido pela caixa de listagem foi alterada.
Para obter mais informações, consulte Visão geral da modelagem de dados.
Estilos
Os estilos permitem que desenvolvedores e designers padronizem uma aparência específica para seu produto. WPF fornece um modelo de estilo forte, cuja base é 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 com os objetos individuais quando são referenciados. O exemplo a seguir cria um estilo que define a cor do plano de fundo de cada Button janela 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 alvo 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é modelos de controle, 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 fazer referência a um recurso WPF.
Controlos personalizados
Embora o WPF forneça um host de suporte à personalização, você pode encontrar situações em que os controles WPF existentes não atendem às necessidades do seu aplicativo ou de seus usuários. Isto pode ocorrer quando:
- A interface do usuário que você precisa não pode ser criada personalizando a aparência das implementações existentes do WPF.
- O comportamento que você precisa não é suportado (ou não é facilmente suportado) por implementações WPF existentes.
Neste ponto, no entanto, você pode aproveitar um dos três modelos WPF para criar um novo controle. Cada modelo tem como alvo um cenário específico e requer que seu controle personalizado derive de uma classe base WPF específica. Os três modelos estão listados aqui:
Modelo de Controle de Usuário
Um controle personalizado deriva de UserControl e é composto de um ou mais outros controles.Modelo de Controlo Um controle personalizado deriva de Control e é usado para criar implementações que separam seu comportamento de sua aparência usando modelos, muito parecido com a maioria dos controles WPF. Derivar de Control permite mais liberdade para criar uma interface de utilizador personalizada do que controles de interface do utilizador, mas pode exigir mais esforço.
Modelo de elemento de estrutura.
Um controlo personalizado deriva de FrameworkElement quando a sua aparência é definida pela lógica de renderização personalizada (não por modelos).
Para obter mais informações sobre controles personalizados, consulte Visão geral da criação de controle.
Ver também
.NET Desktop feedback