Partilhar via


Visão geral sobre elementos base

Uma alta porcentagem das classes do Windows Presentation Foundation (WPF) são derivadas de quatro classes que são normalmente referenciadas na documentação do SDK como classes base de elemento. Essas classes são UIElement, FrameworkElement, ContentElement e FrameworkContentElement. A classe DependencyObject também é relacionada, pois ela é um classe base comum a ambas UIElement e ContentElement

Este tópico contém as seguintes seções.

  • As APIs de elemento base nas classes do WPF
  • Escolher de qual elemento derivar
  • Outras classes base
  • Tópicos relacionados

As APIs de elemento base nas classes do WPF

Tanto UIElement quanto ContentElement são derivadas de DependencyObject, por meio de caminhos um pouco diferentes. A divisão nesse nível lida com como um UIElement ou ContentElement são usados em uma interface de usuário e o que finalidade servem em um aplicativo. UIElement também tem Visual em sua hierarquia de classe, que é uma classe que expõe subjacente ao suporte a gráficos de nível inferior a Windows Presentation Foundation (WPF). Visual Fornece uma estrutura de renderização por meio da definição de regiões independentes tela retangular. Na prática, UIElement é para elementos que oferecerá suporte a um modelo de objeto maior, se destinam a processar e layout em regiões que podem ser descritas sistema autônomo regiões de tela retangular e onde o modelo de conteúdo está deliberadamente mais em aberto, para permitir combinações diferentes de elementos. ContentElement não é derivado de Visual; seu modelo é que um ContentElement deve ser consumido por algo, sistema autônomo um leitor ou visualizador, em seguida, interpretar sistema autônomo elementos e produzir o completo Visual para Windows Presentation Foundation (WPF) para consumir. CertosUIElement classes devem ser hosts conteúdos: Eles oferecem hospedagem e renderização para um ou mais ContentElement classes)DocumentViewer é um exemplo de tal classe). ContentElement é usado sistema autônomo classe base para elementos com um pouco menor modelos de objeto e que mais atender o texto, informações, ou documentos de conteúdo que pode ser hospedado dentro de um UIElement.

Nivel de Framework e Nível de Núcleo

UIElement serve como classe base para FrameworkElement e ContentElement serve como classe base para FrameworkContentElement. A razão para essa outro nível de classes é suportar um nível de núcleo do WPF que é separado do nível de framework do WPF, com essa divisão também existente em como as APIs são divididas entre os conjuntos de módulos (assemblies) PresentationCore e PresentationFramework. O nível de framework do WPF apresenta uma solução mais completa para necessidades básicas de aplicativos, incluindo a implementação do gerente de layout de apresentação. O nível de núcleo do WPF fornece uma maneira de usar grande parte do WPF sem a sobrecarga do conjunto de módulos (assembly) adicional. A distinção entre esses níveis muito raramente é importante para os cenários de desenvolvimento de aplicativos mais comuns, e em geral, você deve pensar nas APIs do WPF como um todo e não se preocupar com a diferença entre nível de framework do WPF e nível de núcleo do WPF. Talvez você precise saber sobre as distinções dos níveis se seu projeto de aplicativo optar por substituir quantidades substanciais das funcionalidades do nível de framework do WPF, por exemplo, se sua solução já tiver suas próprias implementações de composição e layout de interface do usuário (UI).

Escolher de qual elemento derivar

A maneira mais prática para criar uma classe personalizada que estende o WPF é derivar de uma das classes do WPF onde você obtem tanto quanto possível da funcionalidade desejada por meio da hierarquia de classes existente. Esta seção lista a funcionalidade que vem com três das classes de elemento 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 do WPF, você provavelmente deseja derivar de uma classe que seja um controle prático, uma classe base de uma família de controles ou, no mínimo, da classe base Control. Para obter algumas orientações e exemplos práticos, consulte Visão geral sobre criação de controles.

Se você não estiver criando um controle e precisar derivar de uma classe que esteja acima na hierarquia, as seções a seguir servem como um guia para que características são definidas em cada classe base de elemento.

Se você criar uma classe que é derivada de DependencyObject, você herdará a seguinte funcionalidade:

  • Suporte a GetValue SetValue e suporte ao sistema de propriedades em geral.

  • Habilidade de usar propriedades de dependência e propriedades anexadas que são implementadas como propriedades de dependência.

Se você criar uma classe que é derivada de UIElement, além da funcionalidade fornecida por DependencyObject, você também herda:

  • Suporte básico para valores de propriedade animados. Para obter mais informações, consulte Revisão de Animação.

  • Suporte básico a eventos de entrada e comando. Para obter mais informações, consulte Input Overview e Visão geral de Comando.

  • Métodos virtuais que podem ser sobrescritos para fornecer informações para um sistema de layout.

Se você criar uma classe que é derivada de FrameworkElement, além da funcionalidade fornecida por UIElement, você também herda:

  • Suporte a estilos e storyboards. Para obter mais informações, consulte Style e Visão geral sobre Storyboards.

  • Suporte a associação de dados. Para obter mais informações, consulte Revisão de Associação de Dados.

  • Suporte a referências a recursos dinâmicos. Para obter mais informações, consulte Visão geral sobre Recursos.

  • Suporte a herança de valores de propriedade e outros sinalizadores nos metadados, que ajudam a relatar condições sobre propriedades para serviços do framework, tais como associação de dados, estilos ou a implementação de layout do framework. Para obter mais informações, consulte Metadados de Propriedades de Framework.

  • O conceito de árvore lógica. Para obter mais informações, consulte Árvores em WPF.

  • Suporte para implementação prática do sistema de layout nonível de framework do WPF, incluindo um método OnPropertyChanged sobrescrito que possa detectar as alterações feitas às propriedades que influenciam o layout.

Se você criar uma classe que é derivada de ContentElement, além da funcionalidade fornecida por DependencyObject, você também herda:

Se você criar uma classe que é derivada de FrameworkContentElement, além da funcionalidade fornecida por ContentElement, você também ganha:

  • Suporte a estilos e storyboards. Para obter mais informações, consulte Style e Revisão de Animação.

  • Suporte a associação de dados. Para obter mais informações, consulte Revisão de Associação de Dados.

  • Suporte a referências a recursos dinâmicos. Para obter mais informações, consulte Visão geral sobre Recursos.

  • Suporte a herança de valores de propriedade e outros sinalizadores nos metadados, que ajudam a relatar condições sobre propriedades para serviços do framework, tais como associação de dados, estilos ou a implementação de layout do framework. Para obter mais informações, consulte Metadados de Propriedades de Framework.

  • Você não herda acesso a modificações ao sistema de layout (como ArrangeOverride). Implementações do sistema de layout só estão disponíveis no FrameworkElement. No entanto, você herda um método OnPropertyChanged sobrescrito que possa detectar as alterações feitas às propriedades que influenciam o layout e reportá-las para os hosts de conteúdo.

Modelos de conteúdo estão documentados para uma variedade de classes. O modelo de conteúdo de uma classe é um fator que você deve considerar se você deseja localizar uma classe adequada da qual derivar. Para obter mais informações, consulte Modelos de conteúdo.

Outras classes base

DispatcherObject

DispatcherObject fornece suporte ao modelo de threads 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 a derivação de DispatcherObject para obter esse suporte ao modelo de threads. Para obter mais informações, consulte Modelo de Threading.

Visual

Visual implementa o conceito de um objeto bidimensional que geralmente requer apresentação visual em uma região aproximadamente retangular. O renderização real de um Visual ocorre em outras classes (não é autônomo), mas o Visual classe fornece um tipo conhecido que é usado por processos de renderização em vários níveis. Visual implementa visitas de teste, mas não expõe eventos que relatam o teste de hit positivos (esses são em UIElement). Para obter mais informações, consulte Programação de Camada Visual.

Freezable

Freezable simula 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 razões de desempenho. O tipo Freezable fornece uma base comum para determinados elementos gráficos como geometrias e pincéis, bem como animações. Em especial, 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 estas subpropriedades podem afetar a renderização. Para obter mais informações, consulte Visão geral sobre objetos Freezable.

Animatable

Animatable é um classe derivada de Freezable que especificamente adiciona a camada de controle de animação e alguns membros utilitários para que se possa distinguir propriedades atualmente em animação das propriedades não animadas.

Controle

Control é a classe base para o tipo de objeto que é chamado as vezes de controle ou componente, dependendo da tecnologia. Em geral, as classes de controles do WPF são classes que representam diretamente um controle da interface do usuário ou participam fortemente da composição de controles. A principal funcionalidade que Control propicia é controlar templating.

Consulte também

Conceitos

Visão geral sobre propriedades de dependência

Visão geral sobre criação de controles

Arquitetura WPF

Referência

Control