Übersicht über Basiselemente
Ein hoher Prozentsatz von Klassen in Windows Presentation Foundation (WPF) wird von vier Klassen abgeleitet, die in der SDK-Dokumentation häufig als Basiselementklassen bezeichnet werden. Diese Klassen sind UIElement, FrameworkElement, ContentElementund FrameworkContentElement. Die DependencyObject-Klasse ist auch verbunden, da sie als gemeinsame Basisklasse von UIElement und ContentElement dient.
Basiselement-APIs in WPF-Klassen
Sowohl UIElement als auch ContentElement werden von DependencyObjectabgeleitet, durch etwas unterschiedliche Wege. Die Aufteilung auf dieser Ebene befasst sich mit der Verwendung eines UIElement oder ContentElement in einer Benutzeroberfläche und welchem Zweck sie in einer Anwendung dienen. UIElement verfügt in seiner Klassenhierarchie auch über Visual, eine Klasse, die die Grafikunterstützung auf niedrigerer Ebene offenlegt, die der Windows Presentation Foundation (WPF) zugrunde liegt. Visual stellt ein Renderingframework bereit, indem unabhängige rechteckige Bildschirmbereiche definiert werden. In der Praxis ist UIElement für Elemente vorgesehen, die ein größeres Objektmodell unterstützen, für das Rendern und Layout in Regionen vorgesehen sind, die als rechteckige Bildschirmbereiche beschrieben werden können und wo das Inhaltsmodell absichtlich offener ist, um verschiedene Kombinationen von Elementen zu ermöglichen. ContentElement wird nicht von Visualabgeleitet; Das Modell besteht darin, dass ein ContentElement von etwas anderem genutzt wird, z. B. von einem Leser oder Viewer, der dann die Elemente interpretiert und die vollständige Visual für Windows Presentation Foundation (WPF) produziert, die verwendet werden soll. Bestimmte UIElement Klassen sollen Inhaltshosts sein: Sie stellen das Hosten und Rendern für eine oder mehrere ContentElement Klassen bereit (DocumentViewer ist ein Beispiel für eine solche Klasse). ContentElement wird als Basisklasse für Elemente mit etwas kleineren Objektmodellen verwendet, die stärker auf den Text, die Informationen oder die Dokumentinhalte abzielen, die in einem UIElementgehostet werden können.
Framework-Level und Core-Level
UIElement dient als Basisklasse für FrameworkElementund ContentElement dient als Basisklasse für FrameworkContentElement. Der Grund für diese nächste Klassenebene besteht darin, eine WPF-Kernebene zu unterstützen, die von einer WPF-Frameworkebene getrennt ist, wobei diese Division auch darin besteht, wie die APIs zwischen den PresentationCore- und PresentationFramework-Assemblys aufgeteilt werden. Die WPF-Frameworkebene stellt eine umfassendere Lösung für grundlegende Anwendungsanforderungen dar, einschließlich der Implementierung des Layout-Managers für die Präsentation. Die WPF-Kernebene bietet eine Möglichkeit, einen Großteil von WPF zu verwenden, ohne den Aufwand der zusätzlichen Assembly in Kauf zu nehmen. Die Unterscheidung zwischen diesen Ebenen ist für die meisten typischen Anwendungsentwicklungsszenarien sehr selten wichtig, und im Allgemeinen sollten Sie sich die WPF-APIs als Ganzes vorstellen und sich nicht mit dem Unterschied zwischen WPF-Frameworkebene und WPF-Kernebene befassen. Möglicherweise müssen Sie die Ebenenunterschiede kennen, wenn Ihr Anwendungsdesign erhebliche Mengen von Funktionen auf WPF-Frameworkebene ersetzt, z. B. wenn Ihre Gesamtlösung bereits über eigene Implementierungen der Benutzeroberfläche (Ui) Komposition und Layout verfügt.
Auswählen des abzuleitenden Elements
Die praktischste Methode zum Erstellen einer benutzerdefinierten Klasse, die WPF erweitert, besteht darin, von einer der WPF-Klassen abzuleiten, in denen Sie über die vorhandene Klassenhierarchie so viel wie möglich von der gewünschten Funktionalität erhalten. In diesem Abschnitt wird die Funktionalität von drei der wichtigsten Elementklassen beschrieben, um Ihnen zu helfen, zu entscheiden, von welcher Klasse Sie erben sollten.
Wenn Sie ein Steuerelement implementieren, was wirklich einer der häufigsten Gründe für die Ableitung von einer WPF-Klasse ist, möchten Sie wahrscheinlich von einer Klasse ableiten, die ein praktisches Steuerelement ist, eine Basis für eine Steuerelemente-Familie darstellt oder zumindest von der Control-Basisklasse. Einige Anleitungen und praktische Beispiele finden Sie im Abschnitt Überblick über die Erstellung von Steuerelementen.
Wenn Sie kein Steuerelement erstellen und von einer in der Hierarchie übergeordneten Klasse abgeleitet werden müssen, dienen die folgenden Abschnitte als Leitfaden für die in jeder Basisklasse von Elementen definierten Merkmale.
Wenn Sie eine Klasse erstellen, die von DependencyObjectabgeleitet wird, erben Sie die folgende Funktionalität:
Unterstützung für GetValue und SetValue sowie allgemeine Unterstützung des Eigenschaftensystems.
Möglichkeit zur Verwendung von Abhängigkeitseigenschaften und angefügten Eigenschaften, die als solche implementiert sind.
Wenn Sie eine Klasse erstellen, die von UIElementabgeleitet wird, erben Sie zusätzlich zu der von DependencyObjectbereitgestellten Funktionalität die folgende Funktionalität:
Grundlegende Unterstützung für animierte Eigenschaftswerte. Weitere Informationen finden Sie unter Animationsübersicht.
Grundlegende Unterstützung für Eingabeereignisse und Befehlsunterstützung. Weitere Informationen finden Sie unter Eingabeübersicht und Befehlsübersicht.
Virtuelle Methoden, die überschrieben werden können, um Informationen für ein Layoutsystem bereitzustellen.
Wenn Sie eine Klasse erstellen, die von FrameworkElementabgeleitet wird, erben Sie zusätzlich zu der von UIElementbereitgestellten Funktionalität die folgende Funktionalität:
Unterstützung für Stilgestaltung und Storyboards. Weitere Informationen finden Sie unter Style und Storyboards Overview.
Unterstützung für die Datenbindung. Weitere Informationen finden Sie unter Data Binding Overview.
Unterstützung für dynamische Ressourcenverweise. Weitere Informationen finden Sie in den XAML-Ressourcen.
Unterstützung der Eigenschaftswertvererbung sowie andere Flags in den Metadaten, die dabei helfen, Bedingungen zu Eigenschaften an Frameworkdienste wie Datenbindung, Stile oder die Frameworkimplementierung des Layouts zu melden. Weitere Informationen finden Sie unter Framework Property Metadata.
Das Konzept des logischen Baums. Weitere Informationen finden Sie unter Trees in WPF.
Unterstützung für die praktische Umsetzung des Layoutsystems auf der WPF-Frameworkebene, einschließlich einer OnPropertyChanged-Überschreibung, die Änderungen an Eigenschaften erkennen kann, die das Layout beeinflussen.
Wenn Sie eine Klasse erstellen, die von ContentElementabgeleitet wird, erben Sie zusätzlich zu der von DependencyObjectbereitgestellten Funktionalität die folgende Funktionalität:
Unterstützung für Animationen. Weitere Informationen finden Sie unter Animationsübersicht.
Grundlegende Unterstützung für Eingabeereignisse und Befehlsunterstützung. Weitere Informationen finden Sie unter Eingabeüberblick und Befehlsübersicht.
Wenn Sie eine Klasse erstellen, die von FrameworkContentElementabgeleitet wird, erhalten Sie zusätzlich zu der von ContentElementbereitgestellten Funktionalität die folgenden Funktionen:
Unterstützung für Formatierungen und Storyboards. Weitere Informationen finden Sie unter Style und Animation Overview.
Unterstützung für die Datenbindung. Weitere Informationen finden Sie unter Data Binding Overview.
Unterstützung für dynamische Ressourcenverweise. Weitere Informationen finden Sie unter XAML-Ressourcen.
Unterstützung der Eigenschaftswertvererbung sowie andere Kennzeichen in den Metadaten, die Bedingungen zu Eigenschaften für Framework-Dienste wie Datenbindung, Formatvorlagen oder die Framework-Implementierung des Layouts erfassen. Weitere Informationen finden Sie unter Framework Property Metadata.
Sie erben keinen Zugriff auf Layoutsystemänderungen (z. B. ArrangeOverride). Layoutsystemimplementierungen sind nur für FrameworkElementverfügbar. Sie erben jedoch eine OnPropertyChanged-Überschreibung, die Änderungen an Eigenschaften, die das Layout beeinflussen, erkennen und an Inhaltshosts melden kann.
Inhaltsmodelle werden 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 geeignete Klasse finden möchten, von der sie abgeleitet werden soll. Weitere Informationen finden Sie unter WPF Content Model.
Andere Basisklassen
DispatcherObject
DispatcherObject bietet Unterstützung für das WPF-Threadingmodell und ermöglicht es allen Objekten, die für WPF-Anwendungen erstellt wurden, einem Dispatcherzugeordnet zu werden. Auch wenn Sie nicht von UIElement, DependencyObjectoder Visualabgeleitet sind, sollten Sie die Ableitung von DispatcherObject in Betracht ziehen, um diese Threadmodellunterstützung zu erhalten. Weitere Informationen finden Sie unter Threading Model.
Visuell
Visual implementiert das Konzept eines 2D-Objekts, das in der Regel eine visuelle Darstellung in einem ungefähr rechteckigen Bereich erfordert. Das tatsächliche Rendern einer Visual erfolgt in anderen Klassen (es ist nicht eigenständig), aber die Visual-Klasse stellt einen bekannten Typ bereit, der von Renderingprozessen auf verschiedenen Ebenen verwendet wird. Visual implementiert Treffertests, macht jedoch keine Ereignisse verfügbar, die Treffertests positiv melden (diese sind in UIElement). Weitere Informationen finden Sie unter Visual Layer Programming.
Gefrierbar
Freezable simuliert die Unveränderlichkeit in einem veränderbaren Objekt, indem die Mittel zum Generieren von Kopien des Objekts bereitgestellt werden, wenn ein unveränderliches Objekt aus Leistungsgründen erforderlich oder gewünscht wird. Der Freezable Typ stellt eine allgemeine Grundlage für bestimmte Grafikelemente wie Geometrien und Pinsel sowie Animationen bereit. Ein Freezable ist insbesondere kein Visual; es kann Eigenschaften enthalten, die zu Untereigenschaften werden, wenn Freezable angewendet wird, um einen Eigenschaftswert eines anderen Objekts zu vervollständigen, und diese Untereigenschaften können sich auf das Rendern auswirken. Weitere Informationen finden Sie unter Übersicht über einfrierbare Objekte.
Animatable ist eine von Freezable abgeleitete Klasse, die speziell die Animationssteuerungsebene und einige Hilfsfunktionen hinzufügt, sodass derzeit animierte Eigenschaften von nicht animierten Eigenschaften unterschieden werden können.
Steuerung
Control ist die beabsichtigte Basisklasse für den Objekttyp, der je nach Technologie unterschiedlich als Steuerelement oder Komponente bezeichnet wird. Im Allgemeinen sind WPF-Steuerelementklassen Klassen, die entweder direkt ein UI-Steuerelement darstellen oder eng an der Steuerelementkomposition teilnehmen. Die primäre Funktionalität, die Control ermöglicht, ist die Vorlagensteuerung.
Siehe auch
.NET Desktop feedback