Übersicht über Basiselemente

Aktualisiert: November 2007

Ein sehr großer Teil der Klassen in Windows Presentation Foundation (WPF) ist von vier Klassen abgeleitet, die im Allgemeinen in der SDK-Dokumentation als Basiselementklassen bezeichnet werden. Diese Klassen sind UIElement, FrameworkElement, ContentElement und FrameworkContentElement. Die DependencyObject-Klasse ist ebenfalls in diesem Zusammenhang zu sehen, da es sich dabei um eine allgemeine Basisklasse von UIElement und von ContentElement handelt.

Dieses Thema enthält folgende Abschnitte.

  • Basiselement-APIs in WPF-Klassen
  • Auswählen der Elemente für die Ableitung
  • Andere Basisklassen
  • Verwandte Abschnitte

Basiselement-APIs in WPF-Klassen

Sowohl UIElement als auch ContentElement werden von dem DependencyObject abgeleitet, auf leicht unterschiedlichen Wegen. Die Aufteilung auf dieser Ebene bezieht sich darauf, wie ein UIElement oder ein ContentElement in einer Benutzeroberfläche verwendet wird und zu welchem Zweck diese in einer Anwendung dienen. Das UIElement hat außerdem Visual in seiner Klassenhierarchie. Dabei handelt es sich um eine Klasse, die die dem Windows Presentation Foundation (WPF) zugrunde liegende Unterstützung für Grafiken auf niedrigerer Ebene verfügbar macht. Visual stellt ein Renderingframework durch die Definition unabhängiger rechteckiger Bildschirmbereiche bereit. In der Praxis wird das UIElement für Elemente verwendet, die ein größeres Objektmodell unterstützen, für das Rendering und Layout in als rechteckige Bildschirmbereiche beschreibbaren Bereichen intendiert sind, und ein absichtlich offeneres Inhaltsmodell verwenden, um verschiedene Kombinationen von Elementen zu ermöglichen. Ein ContentElement wird nicht von Visual abgeleitet. Es folgt einem Modell, bei dem ein ContentElement durch etwas anderes, z. B. einen Reader oder Viewer, verarbeitet wird, der dann die Elemente interpretieren und das gesamte Visual für die Verarbeitung durch Windows Presentation Foundation (WPF) erzeugt. Bestimmte UIElement-Klassen sind als Inhaltshosts gedacht: Sie stellen das Hosting und Rendering für eine oder mehrere ContentElement-Klassen bereit (DocumentViewer ist ein Beispiel für eine solche Klasse). Ein ContentElement wird als Basisklasse für Elemente mit eher kleineren Objektmodellen verwendet, die sich mehr auf den Text, die Informationen oder den Dokumentinhalt beziehen, die innerhalb eines UIElement gehostet werden könnten.

Frameworkebene und Kernebene

UIElement dient als Basisklasse für FrameworkElement, und ContentElement dient als Basisklasse für FrameworkContentElement. Diese nächste Ebene von Klassen dient dazu, eine WPF-Kernebene zu unterstützen, die von einer WPF-Frameworkebene getrennt ist. Diese Trennung besteht auch bei der Aufteilung der APIs zwischen den PresentationCore- und den PresentationFramework-Assemblys. Die WPF-Frameworkebene stellt eine umfassendere Lösung für die grundlegenden Anforderungen von Anwendungen dar, einschließlich der Implementierung eines Layoutmanagers für die Präsentation. Die WPF-Kernebene bietet eine Möglichkeit, einen großen Teil von WPF zu nutzen, ohne den Aufwand der zusätzlichen Assembly übernehmen zu müssen. Die Unterscheidung zwischen diesen beiden Ebenen spielt in den meisten üblichen Anwendungsentwicklungsszenarien kaum eine Rolle. Im Allgemeinen reicht es, die WPF-APIs als Gesamtheit zu sehen und dem Unterschied zwischen WPF-Frameworkebene und WPF-Kernebene keine große Bedeutung beizumessen. Sie müssen die Unterscheidung zwischen diesen Ebenen möglicherweise kennen, wenn in Ihrem Anwendungsentwurf die Funktionen der WPF-Frameworkebene in größerem Umfang ersetzt werden, beispielsweise, wenn Ihre Gesamtlösung eigene Implementierungen von Benutzeroberfläche (user interface, UI)-Zusammensetzung und -Layout hat.

Auswählen der Elemente für die Ableitung

In der Praxis lässt sich eine benutzerdefinierte Klasse, die WPF erweitert, am einfachsten erstellen, indem sie von einer der WPF-Klassen abgeleitet wird, bei der Sie möglichst viele der gewünschten Funktionen über die vorhandene Klassenhierarchie erhalten. In diesem Abschnitt werden die Funktionen aufgeführt, die drei der wichtigsten Elementklassen liefern, um Ihnen die Entscheidung für die Klasse zu erleichtern, von der geerbt werden soll.

Wenn Sie ein Steuerelement implementieren (ein recht häufiger Grund für die Ableitung von einer WPF-Klasse), sollten Sie das Steuerelement von einer Klasse ableiten, die ein geeignetes Steuerelement, eine Steuerelementfamilien-Basisklasse oder zumindest eine Control-Basisklasse ist. Anweisungen und praktische Beispiele finden Sie unter Übersicht über das Erstellen von Steuerelementen.

Wenn Sie kein Steuerelement erstellen und von einer Klasse ableiten möchten, die in der Hierarchie höher steht, finden Sie in den folgenden Abschnitten einen Leitfaden, welche Eigenschaften in den einzelnen Basiselementklassen definiert sind.

Wenn Sie eine Klasse erstellen, die von DependencyObject abgeleitet wird, erben Sie die folgenden Funktionen:

  • Unterstützung von GetValue und SetValue sowie allgemeine Unterstützung des Eigenschaftensystems.

  • Fähigkeit zur Verwendung 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 den Funktionen, die DependencyObject bereitstellt, die folgenden Funktionen:

  • Grundlegende Unterstützung von animierten Eigenschaftenwerten. Weitere Informationen finden Sie unter Übersicht über Animationen.

  • Grundlegende Unterstützung von Eingabeereignissen und Unterstützung von Befehlen. 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 den Funktionen, die UIElement bereitstellt, die folgenden Funktionen:

  • Unterstützung von Formatierung und Storyboards. Weitere Informationen finden Sie unter Style und Übersicht über Storyboards.

  • Unterstützung von Datenbindung. Weitere Informationen finden Sie unter Übersicht über Datenbindung.

  • Unterstützung von dynamischen Ressourcenverweisen. Weitere Informationen finden Sie unter Übersicht über Ressourcen.

  • Unterstützung der Vererbung von Eigenschaftenwerten und weitere Flags in den Metadaten, die die Meldung von Bedingungen für Eigenschaften an Frameworkdienste unterstützen, z. B. Datenbindung, Stile oder die Frameworkimplementierung von Layout. Weitere Informationen hierzu finden Sie unter Framework-Eigenschaftenmetadaten.

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

  • Unterstützung der praktischen WPF-Frameworkebenen-Implementierung des Layoutsystems, einschließlich einer OnPropertyChanged-Überschreibung, die Änderungen an Eigenschaften mit Auswirkungen auf das Layout erkennen kann.

Wenn Sie eine Klasse erstellen, die von ContentElement abgeleitet wird, erben Sie zusätzlich zu den Funktionen, die DependencyObject bereitstellt, die folgenden Funktionen:

Wenn Sie eine Klasse erstellen, die von FrameworkContentElement abgeleitet wird, erhalten Sie zusätzlich zu den Funktionen, die ContentElement bereitstellt, die folgenden Funktionen:

  • Unterstützung von Formatierung und Storyboards. Weitere Informationen finden Sie unter Style und Übersicht über Animationen.

  • Unterstützung von Datenbindung. Weitere Informationen finden Sie unter Übersicht über Datenbindung.

  • Unterstützung von dynamischen Ressourcenverweisen. Weitere Informationen finden Sie unter Übersicht über Ressourcen.

  • Unterstützung der Vererbung von Eigenschaftenwerten und weitere Flags in den Metadaten, die die Meldung von Bedingungen für Eigenschaften an Frameworkdienste unterstützen, z. B. Datenbindung, Stile oder die Frameworkimplementierung von Layout. Weitere Informationen hierzu finden Sie unter Framework-Eigenschaftenmetadaten.

  • Sie erben keinen Zugriff auf Layoutsystemänderungen (wie ArrangeOverride). Layoutsystemimplementierungen sind nur für FrameworkElement verfügbar. Sie erben jedoch eine OnPropertyChanged-Überschreibung, die Änderungen an Eigenschaften mit Auswirkungen auf das Layout erkennen und diese Änderungen an Inhaltshosts melden kann.

Inhaltsmodelle sind für eine Vielzahl von Klassen dokumentiert. Das Inhaltsmodell für eine Klasse ist ein möglicher Faktor, den Sie betrachten sollten, wenn Sie eine geeignete Klasse als Basis für die Ableitung suchen. Weitere Informationen hierzu finden Sie unter Inhaltsmodelle.

Andere Basisklassen

DispatcherObject

DispatcherObject bietet Unterstützung für das WPF-Threadingmodell und ermöglicht allen Objekten, die für WPF-Anwendungen erstellt werden, die Zuordnung zu einem Dispatcher. Auch wenn Sie nicht von UIElement, DependencyObject oder Visual ableiten, sollten Sie eine Ableitung von DispatcherObject in Betracht ziehen, um diese Unterstützung für das Threadingmodell zu erhalten. Weitere Informationen hierzu finden Sie unter Threading-Modell.

Visual

Visual implementiert das Konzept eines 2D-Objekts, für das im Allgemeinen die visuelle Präsentation in einem etwa rechteckigen Bereich erforderlich ist. Das tatsächliche Rendern von Visual geschieht in anderen Klassen (d. h., es erfolgt 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 Treffertestergebnisse melden (diese sind in UIElement enthalten). Weitere Informationen hierzu finden Sie unter Programmierung auf visueller Ebene.

Freezable

Freezable simuliert Unveränderlichkeit in einem änderbaren Objekt durch Bereitstellung der Möglichkeit zum Generieren von Kopien des Objekts, wenn ein unveränderliches Objekt erforderlich oder aus Leistungsgründen erwünscht ist. Der Freezable-Typ liefert eine gemeinsame Basis für bestimmte Grafikelemente wie Geometrien und Pinsel sowie Animationen. Insbesondere ist ein Freezable-Objekt kein Visual-Objekt. Es kann Eigenschaften speichern, die zu untergeordneten Eigenschaften werden, wenn Freezable verwendet wird, um einen Eigenschaftenwert für ein anderes Objekt zu liefern, und diese untergeordneten Eigenschaften können das Rendern beeinträchtigen. Weitere Informationen finden Sie unter Übersicht über Freezable-Objekte.

Animatable

Animatable ist eine von Freezable abgeleitete Klasse, die insbesondere die Animationssteuerungsebene sowie einige Dienstprogramm-Member hinzufügt, sodass gegenwärtig animierte Eigenschaften von nicht animierten Eigenschaften unterschieden werden können.

Control

Control ist die intendierte Basisklasse für den Objekttyp, der je nach Technologie als Steuerelement oder Komponente bezeichnet wird. Im Allgemeinen sind WPF-Steuerelementklassen Klassen, die entweder direkt ein Steuerelement der Benutzeroberfläche darstellen oder eng an der Steuerelementzusammensetzung beteiligt sind. Durch Control wird in erster Linie die Funktion der Steuerelementvorlagen aktiviert.

Siehe auch

Konzepte

Übersicht über Abhängigkeitseigenschaften

Übersicht über das Erstellen von Steuerelementen

WPF-Architektur

Referenz

Control