Dela via


Översikt över grundelement

En hög procentandel klasser i Windows Presentation Foundation (WPF) härleds från fyra klasser som vanligtvis i SDK-dokumentationen kallas baselementklasser. Dessa klasser är UIElement, FrameworkElement, ContentElementoch FrameworkContentElement. Klassen DependencyObject är också relaterad eftersom den är en vanlig basklass för både UIElement och ContentElement

API:er för baselement i WPF-klasser

Både UIElement och ContentElement härleds från DependencyObject, genom något olika vägar. Uppdelningen på den här nivån handlar om hur en UIElement eller ContentElement används i ett användargränssnitt och vilket syfte de tjänar i ett program. UIElement har också Visual i sin klasshierarki, vilket är en klass som tillhandahåller det lägre nivåns grafiska stöd som ligger till grund för Windows Presentation Foundation (WPF). Visual tillhandahåller ett renderingsramverk genom att definiera oberoende rektangulära skärmregioner. I praktiken är UIElement för element som stöder en större objektmodell, är avsedda att återge och layouta i regioner som kan beskrivas som rektangulära skärmregioner och där innehållsmodellen avsiktligt är mer öppen, för att tillåta olika kombinationer av element. ContentElement härleds inte från Visual; dess modell är att en ContentElement skulle förbrukas av något annat, till exempel en läsare eller tittare som sedan skulle tolka elementen och producera hela Visual för att Windows Presentation Foundation (WPF) ska kunna använda det. Vissa UIElement klasser är avsedda att vara innehållsvärdar: de tillhandahåller värd och rendering för en eller flera ContentElement klasser (DocumentViewer är ett exempel på en sådan klass). ContentElement används som basklass för element med något mindre objektmodeller och som mer hanterar text, information eller dokumentinnehåll som kan finnas i en UIElement.

Framework-Level och Core-Level

UIElement fungerar som basklass för FrameworkElementoch ContentElement fungerar som basklass för FrameworkContentElement. Anledningen till nästa nivå av klasser är att stödja en WPF-kärnnivå som är separat från en WPF-ramverksnivå, med den här divisionen som också finns i hur API:erna delas mellan PresentationCore- och PresentationFramework-sammansättningarna. WPF-ramverksnivån presenterar en mer komplett lösning för grundläggande programbehov, inklusive implementeringen av layouthanteraren för presentation. WPF-kärnnivån ger ett sätt att använda mycket av WPF utan att behöva den extra resursanvändningen av den ytterligare assemblyn. Skillnaden mellan dessa nivåer spelar mycket sällan roll för de flesta typiska programutvecklingsscenarier, och i allmänhet bör du tänka på WPF-API:erna som helhet och inte bry dig om skillnaden mellan WPF-ramverksnivå och WPF-kärnnivå. Du kan behöva känna till nivåskillnaderna om programdesignen väljer att ersätta stora mängder WPF-ramverksnivåfunktioner, till exempel om din övergripande lösning redan har sina egna implementeringar av användargränssnittets sammansättning och layout.

Välja vilket element som ska härledas från

Det mest praktiska sättet att skapa en anpassad klass som utökar WPF är genom att härleda från en av WPF-klasserna där du får så mycket som möjligt av dina önskade funktioner via den befintliga klasshierarkin. I det här avsnittet visas de funktioner som medföljer tre av de viktigaste elementklasserna som hjälper dig att avgöra vilken klass du ska ärva från.

Om du implementerar en kontroll, vilket egentligen är en av de vanligaste orsakerna till att härleda från en WPF-klass, vill du förmodligen härleda från en klass som är en praktisk kontroll, en basklass för kontrollfamiljen eller åtminstone från Control basklass. För några riktlinjer och praktiska exempel, se Översikt över skapande av kontroller.

Om du inte skapar en kontroll och behöver härleda från en klass som är högre i hierarkin är följande avsnitt avsedda som en guide för vilka egenskaper som definieras i varje baselementklass.

Om du skapar en klass som härleds från DependencyObjectärver du följande funktioner:

  • stöd för GetValue och SetValue samt stöd för system för allmänna egenskaper.

  • Förmåga att använda beroendeegenskaper och anslutna egenskaper implementerade som sådana.

Om du skapar en klass som härleds från UIElementärver du följande funktioner utöver den som tillhandahålls av DependencyObject:

  • Grundläggande stöd för animerade egenskapsvärden. För mer information, se Animeringsöversikt.

  • Grundläggande stöd för indatahändelser och kommandostöd. Mer information finns i Översikt över indata och -kommandoöversikt.

  • Virtuella metoder som kan åsidosättas för att ge information till ett layoutsystem.

Om du skapar en klass som härleds från FrameworkElementärver du följande funktioner utöver den som tillhandahålls av UIElement:

  • Stöd för styling och storyboards. Mer information finns i Style och Storyboards Overview.

  • Stöd för databindning. Mer information finns i Översikt över databindning.

  • Stöd för dynamiska resursreferenser. Mer information finns i XAML-resurser.

  • Arvsstöd för egenskapsvärde och andra flaggor i metadata som hjälper till att rapportera villkor om egenskaper för ramverkstjänster, till exempel databindning, formatmallar eller ramverksimplementering av layout. Mer information finns i Framework-egenskapsmetadata.

  • Begreppet logiskt träd. Mer information finns i Trees in WPF.

  • Stöd för den praktiska implementeringen på WPF-ramverksnivå av layoutsystemet, inklusive en OnPropertyChanged åsidosättning som kan identifiera ändringar i egenskaper som påverkar layouten.

Om du skapar en klass som härleds från ContentElementärver du följande funktioner utöver den som tillhandahålls av DependencyObject:

Om du skapar en klass som härleds från FrameworkContentElementfår du följande funktioner utöver den som tillhandahålls av ContentElement:

  • Stöd för styling och storyboards. Mer information finns i översikten över Style och animering.

  • Stöd för databindning. Mer information finns i Översikt över databindning.

  • Stöd för dynamiska resursreferenser. Mer information finns i XAML-resurser.

  • Arvsstöd för egenskapsvärde och andra flaggor i metadata som hjälper till att rapportera villkor om egenskaper för ramverkstjänster som databindning, formatmallar eller ramverksimplementering av layout. Mer information finns i Framework-egenskapsmetadata.

  • Du ärver inte åtkomst till systemändringar i layouten (till exempel ArrangeOverride). Layoutsystemimplementeringar är endast tillgängliga på FrameworkElement. Du ärver dock en OnPropertyChanged-åtgärd som kan identifiera ändringar i egenskaper som påverkar layouten och rapportera dessa till alla innehållshanterare.

Innehållsmodeller dokumenteras för en mängd olika klasser. Innehållsmodellen för en klass är en möjlig faktor som du bör överväga om du vill hitta en lämplig klass att härleda från. Mer information finns i WPF-innehållsmodell.

Andra basklasser

DispatcherObject

DispatcherObject ger stöd för WPF-trådningsmodellen och gör att alla objekt som skapats för WPF-program kan associeras med en Dispatcher. Även om du inte härleder från UIElement, DependencyObjecteller Visualbör du överväga att härleda från DispatcherObject för att få det här stöd för trådningsmodellen. Mer information finns i Threading Model.

Visuell

Visual implementerar begreppet 2D-objekt som vanligtvis kräver visuell presentation i en ungefär rektangulär region. Den faktiska återgivningen av en Visual sker i andra klasser (den är inte fristående), men klassen Visual ger en känd typ som används av renderingsprocesser på olika nivåer. Visual implementerar träfftestning, men det exponerar inte händelser som rapporterar träfftester med positiva resultat (dessa finns i UIElement). Mer information finns i Visual Layer Programming.

Frysbar

Freezable simulerar oföränderlighet i ett föränderligt objekt genom att tillhandahålla medel för att generera kopior av objektet när ett oföränderligt objekt krävs eller önskas av prestandaskäl. Den Freezable typen ger en gemensam grund för vissa grafikelement, till exempel geometrier och penslar, samt animeringar. I synnerhet är en Freezable inte en Visual; den kan innehålla egenskaper som blir underegenskaper när Freezable används för att fylla ett egenskapsvärde för ett annat objekt, och dessa underegenskaper kan påverka renderingen. Mer information finns i Översikt över frysta objekt.

Animatable

Animatable är en Freezable-härledd klass som specifikt lägger till animeringskontrollskiktet och vissa hjälpmedlemmar så att för närvarande animerade egenskaper kan skiljas från icke-animerade egenskaper.

Kontroll

Control är den avsedda basklassen för den typ av objekt som kallas för en kontroll eller komponent, beroende på tekniken. I allmänhet är WPF-kontrollklasser klasser som antingen direkt representerar en användargränssnittskontroll eller deltar nära i kontrollsammansättningen. Den primära funktionen som Control aktiverar är mallhantering.

Se även