Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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, ContentElement, und FrameworkContentElement. Die Klasse DependencyObject ist auch verbunden, da sie eine gemeinsame Basisklasse sowohl für UIElement als auch für ContentElement ist.
Basiselement-APIs in WPF-Klassen
UIElement und ContentElement werden beide von DependencyObject auf etwas unterschiedlichen Wegen abgeleitet. Die Aufteilung auf dieser Ebene befasst sich damit, wie ein UIElement oder ContentElement in einer Benutzeroberfläche verwendet wird und welchen Zweck sie in einer Anwendung erfüllen. UIElement hat auch Visual in seiner Klassenhierarchie, eine Klasse, die den Grafik-Support auf niedriger Ebene offenlegt und der Windows Presentation Foundation (WPF) zugrunde liegt. Visual stellt ein Renderingframework bereit, indem unabhängige rechteckige Bildschirmbereiche definiert werden. In der Praxis dienen Elemente, UIElement die ein größeres Objektmodell unterstützen, zum 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 leitet sich nicht ab von Visual; das Modell sieht vor, dass eine ContentElement von etwas anderem konsumiert wird, zum Beispiel von einem Lesegerät oder Betrachter, der dann die Elemente interpretiert und das vollständige Visual produziert, um es für die Windows Presentation Foundation (WPF) zu nutzen. Bestimmte UIElement Klassen sollen Inhaltshosts sein: Sie stellen das Hosten und Rendern für eine oder ContentElement mehrere Klassen bereit (DocumentViewer ist ein Beispiel für eine solche Klasse). ContentElement wird als Basisklasse für Elemente mit etwas kleineren Objektmodellen verwendet und die mehr den Text, die Informationen oder Dokumentinhalte adressieren, die in einem UIElementObjekt gehostet 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 zu übernehmen. 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 werden die Funktionalitäten aufgeführt, die mit drei der wichtigsten Elementklassen kommen, um Ihnen zu helfen, zu entscheiden, von welcher Klasse geerbt werden soll.
Wenn Sie ein Steuerelement implementieren, was tatsächlich 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 darstellt, eine Basisklasse für eine Steuerelementfamilie oder zumindest von der Control-Basisklasse. Einige Anleitungen und praktische Beispiele finden Sie unter Übersicht der Erstellung von Steuerelementen.
Wenn Sie kein Steuerelement erstellen und von einer Klasse abgeleitet werden müssen, die sich höher in der Hierarchie befindet, sind die folgenden Abschnitte als Leitfaden für die in jeder Basiselementklasse definierten Merkmale vorgesehen.
Wenn Sie eine Klasse erstellen, die von DependencyObject abgeleitet wird, erben Sie die folgende Funktionalität:
GetValue und SetValue-Unterstützung sowie allgemeine Unterstützung des Eigenschaftssystems.
Möglichkeit zum Verwenden von Abhängigkeitseigenschaften und angefügten Eigenschaften, die als Abhängigkeitseigenschaften implementiert werden.
Wenn Sie eine Klasse erstellen, die von UIElement abgeleitet ist, erben Sie folgende Funktionalität zusätzlich zu der, die von DependencyObject bereitgestellt wird:
Grundlegende Unterstützung für animierte Eigenschaftswerte. Weitere Informationen finden Sie unter Übersicht über Animationen.
Grundlegende Unterstützung für Eingabeereignisse und Befehlsunterstützung. Weitere Informationen finden Sie unter "Input Overview " und "Commanding Overview".
Virtuelle Methoden, die überschrieben werden können, um Informationen für ein Layoutsystem bereitzustellen.
Wenn Sie eine Klasse erstellen, die von FrameworkElement abgeleitet ist, erben Sie folgende Funktionalität zusätzlich zu der, die von UIElement bereitgestellt wird:
Unterstützung für Stiloptionen und Storyboards. Weitere Informationen finden Sie unter Style " Übersicht über Storyboards".
Unterstützung für die Datenbindung. Weitere Informationen finden Sie unter Übersicht über Datenbindung.
Unterstützung für dynamische Ressourcenreferenzen. Weitere Informationen finden Sie unter XAML-Ressourcen.
Unterstützung für die Vererbung von Eigenschaftswerten und andere Flags innerhalb der Metadaten, die helfen, Bedingungen in Bezug auf Eigenschaften an Framework-Dienste wie Datenbindungen, Stilvorlagen oder die Implementierung des Layouts durch das Framework zu melden. Weitere Informationen finden Sie unter Framework-Eigenschaftsmetadaten.
Das Konzept des logischen Baums. Weitere Informationen finden Sie unter "Trees" in WPF.
Unterstützung für die praktische Implementierung des Layoutsystems im WPF-Framework, einschließlich einer OnPropertyChanged Überschreibung, die Änderungen an Eigenschaften erkennen kann, die das Layout beeinflussen.
Wenn Sie eine Klasse erstellen, die von ContentElement abgeleitet ist, erben Sie folgende Funktionalität zusätzlich zu der, die von DependencyObject bereitgestellt wird:
Unterstützung für Animationen. Weitere Informationen finden Sie unter Übersicht über Animationen.
Grundlegende Unterstützung für Eingabeereignisse und Befehlsunterstützung. Weitere Informationen finden Sie unter "Input Overview " und "Commanding Overview".
Wenn Sie eine Klasse erstellen, die von FrameworkContentElement abgeleitet wird, erhalten Sie die folgende Funktionalität zusätzlich zu der von ContentElement bereitgestellten:
Unterstützung für Stiloptionen und Storyboards. Weitere Informationen finden Sie unter Style " Übersicht über Animationen".
Unterstützung für die Datenbindung. Weitere Informationen finden Sie unter Übersicht über Datenbindung.
Unterstützung für dynamische Ressourcenreferenzen. Weitere Informationen finden Sie unter XAML-Ressourcen.
Unterstützung der Eigenschaftswertvererbung und andere Flags in den Metadaten, mit denen Bedingungen zu Eigenschaften für Frameworkdienste wie Datenbindung, Formatvorlagen oder die Frameworkimplementierung des Layouts erfasst werden. Weitere Informationen finden Sie unter Framework-Eigenschaftsmetadaten.
Sie haben keinen Zugriff auf Änderungen am Layoutsystem, wie z. B. ArrangeOverride. Layoutsystemimplementierungen sind nur verfügbar auf FrameworkElement. 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 im WPF-Inhaltsmodell.
Andere Basisklassen
Dispatcher-Objekt
DispatcherObject bietet Unterstützung für das WPF-Threadingmodell und ermöglicht es allen Objekten, die für WPF-Anwendungen erstellt wurden, einer Dispatcherzugeordnet zu werden. Auch wenn Sie nicht von UIElement, DependencyObject oder Visual abgeleitet sind, sollten Sie erwägen, von DispatcherObject abgeleitet zu werden, um Unterstützung für Threading-Modelle zu erhalten. Weitere Informationen finden Sie unter ThreadingModell.
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 eines Vorgangs 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 die Treffererkennung, stellt jedoch keine Ereignisse zur Verfügung, die eine positive Treffererkennung 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 es die Mittel zum Generieren von Kopien des Objekts bereitstellt, 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 der Freezable auf den Eigenschaftswert eines anderen Objekts angewendet wird, und diese Untereigenschaften können das Rendern beeinflussen. Weitere Informationen finden Sie unter der Übersicht über Freezable-Objekte.
Animatable ist eine Freezable abgeleitete Klasse, die speziell die Animationssteuerelementebene und einige Hilfsmitglieder hinzufügt, damit derzeit animierte Eigenschaften von nichtanimierten 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 Steuerungsvorlagen-Erstellung.
Siehe auch
.NET Desktop feedback