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.
Uma alta porcentagem de classes no WPF (Windows Presentation Foundation) é derivada de quatro classes que geralmente são conhecidas na documentação do SDK como classes de elemento base. Essas classes são UIElement, FrameworkElement, ContentElemente FrameworkContentElement. A DependencyObject classe também está relacionada, porque é uma classe base comum de ambos UIElement e ContentElement
APIs de elemento base em classes WPF
Ambos UIElement e ContentElement são derivados de DependencyObject por caminhos um pouco diferentes. A divisão nesse nível lida com como um UIElement ou ContentElement são usados em uma interface do usuário e qual finalidade eles servem em um aplicativo. UIElement também tem Visual em sua hierarquia de classes, que é uma classe que expõe o suporte a elementos gráficos de nível inferior subjacentes ao WPF (Windows Presentation Foundation). Visual fornece uma estrutura de renderização definindo regiões de tela retangular independentes. Na prática, UIElement é para elementos que darão suporte a um modelo de objeto maior, destinam-se a renderizar e layout em regiões que podem ser descritas como regiões de tela retangulares e onde o modelo de conteúdo é deliberadamente mais aberto, para permitir diferentes combinações de elementos. ContentElement não deriva de Visual; seu modelo é que um ContentElement seria consumido por algo mais, como um receptor que interpretaria os elementos e produziria o completo Visual para ser consumido pelo Windows Presentation Foundation (WPF). Determinadas UIElement classes se destinam a ser hosts de conteúdo: elas fornecem a hospedagem e a renderização para uma ou mais ContentElement classes (DocumentViewer é um exemplo de tal classe). ContentElement é usada como classe base para elementos com modelos de objeto um pouco menores e que abordam mais o texto, as informações ou o conteúdo do documento que pode ser hospedado em um UIElement.
Framework-Level e Core-Level
UIElement serve como a classe base para FrameworkElement, e ContentElement serve como a classe base para FrameworkContentElement. O motivo para esse próximo nível de classes é dar suporte a um nível de núcleo do WPF separado de um nível de estrutura do WPF, com essa divisão também existente em como as APIs são divididas entre os assemblies PresentationCore e PresentationFramework. O nível da estrutura do WPF apresenta uma solução mais completa para as necessidades básicas do aplicativo, incluindo a implementação do gerenciador de layout para apresentação. O nível de núcleo do WPF fornece uma maneira de usar grande parte do WPF sem assumir a sobrecarga do assembly adicional. A distinção entre esses níveis raramente importa para a maioria dos cenários típicos de desenvolvimento de aplicativos e, em geral, você deve pensar nas APIs do WPF como um todo e não se preocupar com a diferença entre o nível de estrutura do WPF e o nível principal do WPF. Talvez seja necessário saber mais sobre as distinções de nível se o design do aplicativo optar por substituir quantidades substanciais de funcionalidade de nível de estrutura do WPF, por exemplo, se sua solução geral já tiver suas próprias implementações de composição e layout de interface do usuário.
Escolhendo de qual elemento derivar
A maneira mais prática de criar uma classe personalizada que estende o WPF é derivando de uma das classes do WPF em que você obtém o máximo possível da funcionalidade desejada por meio da hierarquia de classe existente. Esta seção lista a funcionalidade que vem com três das classes de elementos mais importantes para ajudá-lo a decidir de qual classe herdar.
Se você estiver implementando um controle, que é realmente um dos motivos mais comuns para derivar de uma classe WPF, você provavelmente deseja derivar de uma classe que é um controle prático, uma classe base de família de controle ou pelo menos da Control classe base. Para obter algumas diretrizes e exemplos práticos, consulte Visão geral da criação de controle.
Se você não estiver criando um controle e precisar derivar de uma classe mais alta na hierarquia, as seções a seguir serão destinadas como um guia para quais características são definidas em cada classe de elemento base.
Se você criar uma classe que deriva de DependencyObject, herdará a seguinte funcionalidade:
GetValue suporte e SetValue suporte e suporte geral ao sistema de propriedades.
Capacidade de usar propriedades de dependência e propriedades adjuntas que são implementadas como propriedades de dependência.
Se você criar uma classe da UIElementqual deriva, herdará a seguinte funcionalidade, além da fornecida por DependencyObject:
Suporte básico para valores de propriedade animados. Para obter mais informações, consulte Visão geral da animação.
Suporte básico de evento de entrada e suporte ao comando. Para obter mais informações, consulte Visão geral de entrada e visão geral do comando.
Métodos virtuais que podem ser substituídos para fornecer informações a um sistema de layout.
Se você criar uma classe da FrameworkElementqual deriva, herdará a seguinte funcionalidade, além da fornecida por UIElement:
Suporte para design de estilos e storyboards. Para obter mais informações, consulte Style e Visão Geral de Storyboards.
Suporte para associação de dados. Para obter mais informações, consulte Visão geral da vinculação de dados.
Suporte para referências de recursos dinâmicos. Para obter mais informações, consulte Recursos XAML.
Suporte à herança de valor de propriedade e outros sinalizadores nos metadados que ajudam a relatar condições sobre propriedades para serviços de estrutura, como associação de dados, estilos ou a implementação de layout da estrutura. Para obter mais informações, consulte Metadados de propriedade do Framework.
O conceito da árvore lógica. Para obter mais informações, consulte Árvores no WPF.
Suporte para a implementação prática da estrutura de nível de framework do WPF no sistema de layout, incluindo uma sobrescrita OnPropertyChanged que pode detectar alterações nas propriedades que influenciam o layout.
Se você criar uma classe da ContentElementqual deriva, herdará a seguinte funcionalidade, além da fornecida por DependencyObject:
Suporte para animações. Para obter mais informações, consulte Visão geral da animação.
Suporte básico de evento de entrada e suporte ao comando. Para obter mais informações, consulte Visão geral de entrada e visão geral do comando.
Se você criar uma classe da FrameworkContentElementqual deriva, você obterá a seguinte funcionalidade, além da fornecida por ContentElement:
Suporte para design de estilos e storyboards. Para obter mais informações, consulte Style e Visão geral da animação.
Suporte para associação de dados. Para obter mais informações, consulte Visão geral da vinculação de dados.
Suporte para referências de recursos dinâmicos. Para obter mais informações, consulte Recursos XAML.
Suporte à herança de valor de propriedade e outros sinalizadores nos metadados que ajudam a relatar condições sobre propriedades para serviços de estrutura, como associação de dados, estilos ou a implementação de layout da estrutura. Para obter mais informações, consulte Metadados de propriedade do Framework.
Você não herda o acesso a modificações do sistema de layout (como ArrangeOverride). As implementações do sistema de layout só estão disponíveis em FrameworkElement. No entanto, você herda uma substituição OnPropertyChanged que pode detectar alterações nas propriedades que impactam o layout e reportá-las a qualquer host de conteúdo.
Os modelos de conteúdo são documentados para uma variedade de classes. O modelo de conteúdo de uma classe é um fator possível que você deve considerar se quiser encontrar uma classe apropriada para derivar. Para obter mais informações, consulte o Modelo de Conteúdo do WPF.
Outras classes base
DispatcherObject
DispatcherObject fornece suporte para o modelo de threading do WPF e permite que todos os objetos criados para aplicativos WPF sejam associados a um Dispatcher. Mesmo se você não derivar de UIElement, DependencyObject, ou Visual, você deve considerar derivar de DispatcherObject para obter esse suporte de modelo de threading. Para obter mais informações, consulte o Modelo de Threading.
Visual
Visual implementa o conceito de um objeto 2D que geralmente requer apresentação visual em uma região aproximadamente retangular. A renderização real de uma Visual ocorre em outras classes (não é autocontida), mas a classe Visual fornece um tipo conhecido que é usado por processos de renderização em vários níveis. Visual implementa o teste de acerto, mas não expõe eventos que relatam resultados positivos de teste de acerto (estes estão em UIElement). Para obter mais informações, consulte Programação de Camada Visual.
Congelável
Freezable simula a imutabilidade em um objeto mutável fornecendo os meios para gerar cópias do objeto quando um objeto imutável é necessário ou desejado por motivos de desempenho. O Freezable tipo fornece uma base comum para determinados elementos gráficos, como geometrias e pincéis, bem como animações. Notavelmente, um Freezable não é um Visual; ele pode conter propriedades que se tornam subpropriedades quando o Freezable é aplicado para preencher um valor de propriedade de outro objeto, e essas subpropriedades podem afetar a renderização. Para obter mais informações, consulte Visão Geral dos Objetos Freezable.
Animatable é uma Freezable classe derivada que adiciona especificamente a camada de controle de animação e alguns membros utilitários, permitindo que as propriedades animadas sejam distinguidas das propriedades não animadas.
Controle
Control é a classe base pretendida para o tipo de objeto que é chamado de controle ou componente, dependendo da tecnologia. Em geral, as classes de controle do WPF são classes que representam diretamente um controle de interface do usuário ou participam de perto na composição de controle. A principal funcionalidade que Control permite é a criação de modelos de controle.
Consulte também
- Control
- Visão geral das propriedades de dependência
- Visão geral da criação de controle
- arquitetura do WPF
.NET Desktop feedback