Übersicht über Basiselemente

Ein hoher Prozentsatz der Klassen in Windows Presentation Foundation (WPF) stammen von vier Klassen ab, die häufig in der SDK-Dokumentation als Basiselementklassen bezeichnet werden. Dabei handelt es sich um folgende Klassen: UIElement, FrameworkElement, ContentElement, und FrameworkContentElement. Die DependencyObject-Klasse ist ebenfalls verwandt, da sie eine gemeinsame Basisklasse von UIElement und ContentElement ist.

Basiselement-APIs in WPF-Klassen

Sowohl UIElement als auch ContentElement leiten sich von DependencyObject ab, und zwar auf etwas unterschiedlichen Wegen. Die Aufteilung auf dieser Ebene befasst sich damit, wie ein UIElement oder ContentElement in einer Benutzeroberfläche verwendet werden und welche Zwecke sie in einer Anwendung erfüllen. UIElement verfügt ebenso über Visual in der Klassenhierarchie, was eine Klasse ist, die die Grafikunterstützung auf niedriger Ebene unterhalb von Windows Presentation Foundation (WPF) verfügbar macht. Visual bietet ein Rendering-Framework durch Definieren unabhängiger rechteckiger Bildschirmbereiche. In der Praxis ist UIElement für Elemente, die ein größeres Objektmodell unterstützen und die dafür gedacht sind, sich in Bereichen einzupassen und sie zu rendern, die als rechteckige Bildschirmbereiche bezeichnet werden können, auch dies auch dort tun, wo das Inhaltsmodell bewusst offener ist, um unterschiedliche Kombinationen von Elementen zuzulassen. ContentElement leitet sich nicht von Visual ab; sein Modell besteht darin, dass ein ContentElement von etwas anderem genutzt wird, z. B. von einem Reader oder Viewer, der dann die Elemente interpretiert und das vollständige Visual für Windows Presentation Foundation (WPF) zum Nutzen erzeugt. Bestimmte UIElement-Klassen sind als Inhaltshosts gedacht: Sie übernehmen das Hosting und Rendering für eine oder mehrere ContentElement-Klassen (DocumentViewer ist ein Beispiel für eine solche Klasse). ContentElement wird als Basisklasse für Elemente mit kleineren Objektmodellen verwendet und bezieht sich mehr auf den Text, die Informationen oder den Dokumentinhalt, die innerhalb eines UIElement beziehen.

Frameworkebene und Kernebene

UIElement dient als Basisklasse für FrameworkElement, und ContentElement dient als Basisklasse für FrameworkContentElement. Der Grund für diese nächste Klassenebene ist die Unterstützung einer WPF-Kernebene, die unabhängig von einer WPF-Frameworkebene ist. Diese Unterteilung ist auch relevant, in wie weit APIs zwischen den Assemblys PresentationCore und PresentationFramework getrennt sind. Die WPF-Frameworkebene stellt eine vollständigere Lösung für grundlegende Anwendungsanforderungen dar, einschließlich die Implementierung des Layout-Managers für die Darstellung. Die WPF-Kernebene bietet eine Möglichkeit, mehr von WPF zu verwenden, ohne den Mehraufwand der zusätzlichen Assembly. Der Unterschied zwischen diesen Ebenen spielt für die meisten Anwendungsentwicklungsszenarios in den seltensten Fällen eine Rolle. Allgemein sollten Sie die WPF-APIs als Ganzes betrachten und sich keine Sorgen über den Unterschied zwischen der WPF-Frameworkebene und der -Kernebene machen. Sie müssen möglicherweise über die Unterschiede der Ebenen Bescheid wissen, wenn Ihr Anwendungsentwurf eine Vielzahl von Funktionen der WPF-Frameworkebene ersetzt, z.B. wenn Ihre allgemeine Projektmappe schon über eigene Implementierungen der Benutzeroberflächen-Zusammenstellung und des -Layouts verfügt.

Auswählen des Elements für die Ableitung

Der praktischste Weg, eine benutzerdefinierte Klasse zu erstellen, die WPF erweitert, ist durch Ableiten von einer der WPF-Klassen, wobei Sie so viel Funktionalität wie möglich durch die vorhandene Klassenhierarchie erhalten. In diesem Abschnitt sind die Funktionen aufgeführt, die mit drei der wichtigsten Elementklassen geliefert werden, um Ihnen bei der Entscheidung zu helfen, von welcher Klasse geerbt werden soll.

Wenn Sie ein Steuerelement implementieren, das wirklich eines der häufigeren Gründe für die Ableitung von einer WPF-Klasse ist, möchten Sie möglicherweise von einer Klasse ableiten, die ein praktisches Steuerelement darstellt oder zumindest von der Control-Basisklasse. Einige Leitfäden und praktische Beispiele finden Sie unter Übersicht über das Erstellen von Steuerelementen.

Wenn Sie kein Steuerelement erstellen und von einer Klasse ableiten müssen, die in der Hierarchie höher gestellt ist, sollen Ihnen die folgenden Abschnitte als Leitfaden für die Eigenschaften dienen, die in jeder Basiselementklasse definiert sind.

Wenn Sie eine Klasse erstellen, die von DependencyObject abgeleitet wird, erben Sie die folgende Funktionalität:

  • Unterstützung für GetValue und SetValue und allgemeine Unterstützung des Eigenschaftensystems.

  • Fähigkeit zum Verwenden von Abhängigkeitseigenschaften und angefügten Eigenschaften, die als Abhängigkeitseigenschaften implementiert sind

Wenn Sie eine Klasse erstellen, die von UIElement abgeleitet wird, erben Sie zusätzlich zu der, die durch DependencyObject bereitgestellt wird, die folgende Funktionalität:

  • Grundlegende Unterstützung für animierte Eigenschaftswerte. Weitere Informationen finden Sie unter Übersicht über Animation.

  • Grundlegende Unterstützung für Eingabeereignisse und Unterstützung für Befehle. Weitere Informationen finden Sie unter Übersicht über die Eingabe und Befehlsübersicht.

  • Virtuelle Methoden, die überschrieben werden können, um Informationen für ein Layoutsystem bereitzustellen.

Wenn Sie eine Klasse erstellen, die von FrameworkElement abgeleitet wird, erben Sie zusätzlich zu der, die durch UIElement bereitgestellt wird, die folgende Funktionalität:

  • Unterstützung für Formatierung und Storyboards. Weitere Informationen finden Sie in Style und in der Übersicht über Storyboards.

  • Unterstützung für die Datenbindung. Weitere Informationen finden Sie unter Übersicht über Datenbindung.

  • Unterstützung für dynamische Ressourcenverweise. Weitere Informationen finden Sie unter XAML-Ressourcen.

  • Unterstützung für die Eigenschaftswertvererbung und andere Flags in den Metadaten, die Ihnen beim Melden von Bedingungen über Eigenschaften für Frameworkdienste helfen, z.B. Datenbindung, Stile oder die Frameworkimplementierung des Layouts. Weitere Informationen finden Sie unter Framework-Eigenschaftenmetadaten.

  • Das Konzept der logischen Struktur. Weitere Informationen finden Sie unter Strukturen in WPF.

  • Unterstützung für die praktische Implementierung der WPF-Frameworkebene des Layoutsystems, einschließlich einer Überschreibung von OnPropertyChanged, die Änderungen an Eigenschaften erkennen kann, die das Layout beeinflussen.

Wenn Sie eine Klasse erstellen, die von ContentElement abgeleitet wird, erben Sie zusätzlich zu der, die durch DependencyObject bereitgestellt wird, die folgende Funktionalität:

Wenn Sie eine Klasse erstellen, die von FrameworkContentElement abgeleitet wird, erben Sie zusätzlich zu der, die durch ContentElement bereitgestellt wird, die folgende Funktionalität:

  • Unterstützung für Formatierung und Storyboards. Weitere Informationen finden Sie unter Style und in der Übersicht über Animation.

  • Unterstützung für die Datenbindung. Weitere Informationen finden Sie unter Übersicht über Datenbindung.

  • Unterstützung für dynamische Ressourcenverweise. Weitere Informationen finden Sie unter XAML-Ressourcen.

  • Unterstützung für die Eigenschaftswertvererbung und andere Flags in den Metadaten, die Ihnen beim Melden von Bedingungen über Eigenschaften für Frameworkdienste helfen, z.B. Datenbindung, Stile oder die Frameworkimplementierung des Layouts. Weitere Informationen finden Sie unter Framework-Eigenschaftenmetadaten.

  • Der Zugriff auf Modifikationen des Layoutsystems (wie ArrangeOverride) wird nicht vererbt. Layoutsystem-Implementierungen sind nur für FrameworkElement verfügbar. Sie erben jedoch eine Überschreibung von OnPropertyChanged, die Änderungen an Eigenschaften erkennen kann, die das Layout beeinflussen können, und diese an Inhaltshosts meldet.

Inhaltsmodelle sind für eine Vielzahl von Klassen dokumentiert. Das Inhaltsmodell für eine Klasse ist ein möglicher Faktor, den Sie berücksichtigen sollten, wenn Sie eine entsprechende Klasse finden möchten, von der Sie ableiten möchten. Weitere Informationen finden Sie unter WPF-Inhaltsmodell.

Andere Basisklassen

DispatcherObject

DispatcherObject bietet Unterstützung für das WPF-Threading-Modell und ermöglicht, dass alle für WPF-Anwendungen erstellten Objekte mit einem Dispatcher verknüpft werden. Auch wenn Sie nicht von UIElement, DependencyObject, oder Visual ableiten, sollten Sie erwägen, von DispatcherObject abzuleiten, um diese Unterstützung für das Threading-Modell zu erhalten. Weitere Informationen finden Sie unter Threading-Modell.

Visuelles Element

Visual implementiert das Konzept eines 2D-Objekts, das im Allgemeinen visuelle Darstellung in einem etwa rechteckigen Bereich erfordert. Das eigentliche Rendern eines Visual geschieht in anderen Klassen (sie ist nicht unabhängig), aber die Visual-Klasse liefert einen bekannten Typ, der von Renderingprozessen auf verschiedenen Ebenen verwendet wird. Visual implementiert Treffertests, macht jedoch keine Ereignisse verfügbar, die positive Treffertests melden (diese befinden sich im UIElement). Weitere Informationen finden Sie unter Programmierung auf visueller Ebene.

Freezable-Objekt

Freezable simuliert Unveränderlichkeit in einem veränderbares Objekt durch Bereitstellung der Möglichkeit, Kopien des Objekts zu generieren, wenn ein unveränderliches Objekt erforderlich oder aus Leistungsgründen erwünscht ist. Der Freezable-Typ stellt eine allgemeine Grundlage für bestimmte Grafikelemente bereit, wie Geometrien und Pinsel sowie Animationen. Insbesondere eine Freezable-Klasse ist keine Visual-Klasse; sie kann Eigenschaften enthalten, die zu Untereigenschaften werden, wenn Freezable zum Füllen eines Eigenschaftswerts eines anderen Objekts angewendet wird. Diese Untereigenschaften können womöglich das Rendern beeinflussen. Weitere Informationen finden Sie unter der Übersicht über Freezable-Objekte.

Animatable

Animatable ist eine von Freezable abgeleitete Klasse, die speziell die Steuerelementebene für die Animation und einige nützliche Member hinzufügt, sodass derzeit animierte Eigenschaften von nicht animierten Eigenschaften unterschieden werden können.

Control

Control ist die beabsichtigte Basisklasse für den Typ des Objekts, das Steuerelement oder eine Komponente genannt wird, je nach Technologie. Im allgemeinen sind WPF-Steuerelementklassen Klassen, die entweder direkt ein Benutzeroberflächen-Steuerelement darstellen oder in der Zusammenstellung der Steuerelemente eng beteiligt sind. Die primäre Funktionalität, die Control ermöglicht, ist die Erstellung von Vorlagen für Steuerelemente.

Weitere Informationen