Sdílet prostřednictvím


Základní prvky – přehled

Vysoké procento tříd ve Windows Presentation Foundation (WPF) jsou odvozeny ze čtyř tříd, které se běžně označují v dokumentaci sady SDK jako základní třídy elementů. Tyto třídy jsou UIElement, FrameworkElement, ContentElementa FrameworkContentElement. Třída DependencyObject také souvisí, protože se jedná o společnou základní třídu UIElement i ContentElement

Základní rozhraní API elementů ve třídách WPF

UIElement i ContentElement jsou odvozeny z DependencyObject, a to poněkud odlišnými cestami. Rozdělení na této úrovni se zabývá tím, jak se UIElement nebo ContentElement používají v uživatelském rozhraní a jaký účel slouží v aplikaci. UIElement má také Visual ve své hierarchii tříd, což je třída, která zveřejňuje podporu grafiky nižší úrovně, která je základem Windows Presentation Foundation (WPF). Visual poskytuje architekturu vykreslování definováním nezávislých obdélníkových oblastí obrazovky. V praxi je UIElement pro prvky, které budou podporovat větší objektový model, jsou určeny k vykreslení a rozložení do oblastí, které lze popsat jako obdélníkové oblasti obrazovky a kde je model obsahu záměrně více otevřený, aby bylo možné povolit různé kombinace prvků. ContentElement se neodvozuje z Visual; jeho model je postaven tak, že ContentElement by bylo spotřebováno něčím jiným, například čtenářem nebo divákem, který by pak interpretoval prvky a vytvořil kompletní Visual, aby jej mohl využít Windows Presentation Foundation (WPF). Některé třídy UIElement mají být hostiteli obsahu: poskytují hostování a vykreslování pro jednu nebo více tříd ContentElement (DocumentViewer je příkladem takové třídy). ContentElement se používá jako základní třída pro prvky s poněkud menšími objektovými modely a které více řeší text, informace nebo obsah dokumentu, který může být hostovaný v rámci UIElement.

Framework-Level a Core-Level

UIElement slouží jako základní třída pro FrameworkElementa ContentElement slouží jako základní třída pro FrameworkContentElement. Důvodem této další úrovně tříd je podpora jádrové úrovně WPF, která je oddělená od úrovně frameworku WPF, přičemž toto rozdělení se také projevuje v tom, jak jsou rozhraní API rozdělena mezi sestavení PresentationCore a PresentationFramework. Úroveň architektury WPF představuje ucelenější řešení pro základní potřeby aplikací, včetně implementace správce rozložení pro prezentaci. Základní úroveň WPF poskytuje způsob, jak používat většinu funkcí WPF, aniž byste museli nést zatížení dodatečné sestavy. Rozdíl mezi těmito úrovněmi velmi zřídka záleží na nejběžnějších scénářích vývoje aplikací, a obecně byste měli uvažovat o rozhraníCH API WPF jako celku, a nemusíte se zabývat rozdílem mezi úrovní architektury WPF a základní úrovní WPF. Možná budete muset vědět o rozdílech na úrovni, pokud se návrh vaší aplikace rozhodne nahradit značné množství funkcí architektury WPF, například pokud vaše celkové řešení již má své vlastní implementace složení a rozložení uživatelského rozhraní.

Výběr prvku, ze kterého se má odvodit

Nejpraktičtější způsob, jak vytvořit vlastní třídu, která rozšiřuje WPF, je odvození z jedné z tříd WPF, kde získáte co nejvíce požadované funkce prostřednictvím stávající hierarchie tříd. Tato část obsahuje seznam funkcí, které jsou součástí tří z nejdůležitějších tříd prvků, které vám pomůžou rozhodnout, ze které třídy se mají dědit.

Pokud implementujete ovládací prvek, což je skutečně jedním z nejběžnějších důvodů pro odvození od třídy WPF, pravděpodobně budete chtít odvodit z třídy, která je praktická ovládací třída, základní třída pro rodinu ovládacích prvků, nebo alespoň ze základní třídy Control. Některé pokyny a praktické příklady najdete v tématu Přehled vytváření ovládacích prvků.

Pokud nevytvoříte ovládací prvek a potřebujete odvodit z třídy, která je vyšší v hierarchii, jsou následující části určeny jako vodítko pro to, jaké vlastnosti jsou definovány v každé základní třídě elementu.

Pokud vytvoříte třídu odvozenou z DependencyObject, zdědíte následující funkce:

  • podpora GetValue a SetValue a obecná podpora systému vlastností.

  • Schopnost používat vlastnosti závislostí a připojené vlastnosti, které jsou implementovány jako vlastnosti závislosti.

Pokud vytvoříte třídu odvozenou z UIElement, dědíte kromě toho následující funkce, které poskytuje DependencyObject:

  • Základní podpora animovaných hodnot vlastností Další informace naleznete v tématu Přehled animací.

  • Základní podpora vstupních událostí a podpora příkazů Další informace naleznete v tématu Přehled vstupu a Přehled příkazů.

  • Virtuální metody, které je možné přepsat, aby poskytovaly informace systému rozložení.

Pokud vytvoříte třídu odvozenou z FrameworkElement, dědíte kromě toho následující funkce, které poskytuje UIElement:

  • Podpora stylů a scénářů Další informace naleznete v tématu Přehled Storyboardů Style a .

  • Podpora datových vazeb Další informace viz Přehled datových vazeb.

  • Podpora dynamických odkazů na zdroje Další informace najdete v tématu prostředky XAML.

  • Podpora dědičnosti hodnot vlastností a ostatní příznaky v metadatech, které pomáhají poskytovat podmínky týkající se vlastností pro služby frameworku, jako jsou datové vazby, styly nebo implementace layoutu frameworku. Další informace naleznete v tématu Metadata vlastnosti Frameworku.

  • Koncept logického stromu Další informace naleznete v části Stromy ve WPF.

  • Podpora praktického provedení systému rozvržení na úrovni rámce WPF, včetně přepsání OnPropertyChanged, které dokáže detekovat změny vlastností ovlivňujících rozvržení.

Pokud vytvoříte třídu odvozenou z ContentElement, dědíte kromě toho následující funkce, které poskytuje DependencyObject:

Pokud vytvoříte třídu odvozenou z FrameworkContentElement, získáte kromě toho následující funkce, které poskytuje ContentElement:

  • Podpora stylů a scénářů Další informace naleznete v přehledu animací, viz a .

  • Podpora datových vazeb Pro více informací si přečtěte Přehled datových vazeb.

  • Podpora odkazů na dynamické prostředky. Další informace najdete v tématu prostředky XAML.

  • Podpora dědičnosti hodnot vlastností a další příznaky v metadatech, které pomáhají hlásit podmínky o vlastnostech pro služby architektury, jako jsou datové vazby, styly nebo implementace architektury rozložení. Další informace naleznete v tématu Metadata vlastností Frameworku.

  • Nedědíte přístup k úpravám systému rozložení (například ArrangeOverride). Implementace systému rozložení jsou k dispozici pouze na FrameworkElement. Zdědíte však přepis OnPropertyChanged, který může detekovat změny vlastností ovlivňujících rozložení a hlásit je jakýmkoliv hostitelům obsahu.

Modely obsahu jsou zdokumentované pro různé třídy. Model obsahu pro třídu je jedním z možných faktorů, který byste měli zvážit, pokud chcete najít odpovídající třídu, ze které má být odvozena. Další informace naleznete v tématu WPF Content Model.

Další základní třídy

Objekt dispečera

DispatcherObject poskytuje podporu pro model vláken WPF a umožňuje, aby všechny objekty vytvořené pro aplikace WPF byly přidruženy k Dispatcher. I když neodvozujete z UIElement, DependencyObjectnebo Visual, měli byste zvážit odvození z DispatcherObject, aby bylo možné získat podporu tohoto modelu vláken. Další informace naleznete v tématu model vlákna.

Vizuální

Visual implementuje koncept 2D objektu, který obecně vyžaduje vizuální prezentaci v zhruba obdélníkové oblasti. Skutečné vykreslování Visual probíhá v jiných třídách (není samostatné), ale třída Visual poskytuje známý typ, který je používán vykreslovacími procesy na různých úrovních. Visual implementuje testování hitů, ale nezpřístupňuje události, které hlásí pozitivní výsledky testování (jsou v UIElement). Další informace naleznete v tématu programování vizuální vrstvy.

Zmrazitelný

Freezable simuluje neměnnost v proměnlivém objektu poskytnutím prostředků k vygenerování kopií objektu v případě, že je z důvodů výkonu vyžadován nebo žádoucí neměnný objekt. Typ Freezable poskytuje společný základ pro určité grafické prvky, jako jsou geometrie a štětce, a také animace. Zejména Freezable není Visual; Může obsahovat vlastnosti, které se při použití Freezable pro vyplnění hodnoty vlastnosti jiného objektu stanou dílčími vlastnostmi a tyto dílčí vlastnosti mohou ovlivnit vykreslování. Další informace naleznete v tématu Přehled zamrznutelných objektů .

Animatable

Animatable je Freezable odvozená třída, která konkrétně přidává vrstvu pro řízení animací a některé užitečné členy, aby bylo možné rozlišit aktuálně animované vlastnosti od neanimovaných vlastností.

Řízení

Control je určená základní třída pro typ objektu, který se v závislosti na technologii označuje jako ovládací prvek nebo komponenta. Obecně platí, že třídy ovládacích prvků WPF jsou třídy, které buď přímo představují ovládací prvek uživatelského rozhraní, nebo se úzce účastní složení řízení. Primární funkce, které Control povolí, je řízení šablon.

Viz také