Delen via


Overzicht basiselementen

Een hoog percentage klassen in Windows Presentation Foundation (WPF) is afgeleid van vier klassen die vaak worden genoemd in de SDK-documentatie als de basiselementklassen. Deze klassen zijn UIElement, FrameworkElementen ContentElementFrameworkContentElement. De DependencyObject klasse is ook gerelateerd, omdat het een gemeenschappelijke basisklasse van beide UIElement en ContentElement

API's voor basiselementen in WPF-klassen

Beide UIElement en ContentElement zijn afgeleid van DependencyObject, via enigszins verschillende paden. De splitsing op dit niveau behandelt hoe een UIElement of ContentElement worden gebruikt in een gebruikersinterface en welk doel ze in een toepassing dienen. UIElement heeft Visual in zijn klassehiërarchie, wat een klasse is die de grafische ondersteuning op een lager niveau die ten grondslag ligt aan de Windows Presentation Foundation (WPF) openstelt. Visual biedt een renderingframework door onafhankelijke rechthoekige schermregio's te definiëren. In de praktijk UIElement is het voor elementen die een groter objectmodel ondersteunen, zijn bedoeld om weer te geven en in te delen in regio's die kunnen worden beschreven als rechthoekige schermregio's en waar het inhoudsmodel bewust opener is, om verschillende combinaties van elementen toe te staan. ContentElement is niet afgeleid van Visual; het model is dat een ContentElement zou worden gebruikt door iets anders, zoals een lezer of viewer die vervolgens de elementen zou interpreteren en het volledige Visual voor Windows Presentation Foundation (WPF) zou produceren om te gebruiken. Bepaalde UIElement klassen zijn bedoeld als inhoudshosts: ze bieden de hosting en rendering voor een of meer ContentElement klassen (DocumentViewer is een voorbeeld van een dergelijke klasse). ContentElement wordt gebruikt als basisklasse voor elementen met iets kleinere objectmodellen, die meer gericht zijn op tekst, informatie of documentinhoud die binnen een UIElement kan worden ondergebracht.

Framework-Level en Core-Level

UIElement fungeert als de basisklasse voor FrameworkElementen ContentElement fungeert als de basisklasse voor FrameworkContentElement. De reden voor dit volgende niveau van klassen is het ondersteunen van een WPF-kernniveau dat losstaat van een WPF-frameworkniveau, waarbij deze divisie ook bestaat in de verdeling van de API's tussen de PresentationCore- en PresentationFramework-assembly's. Het WPF-frameworkniveau biedt een completere oplossing voor basisbehoeften van toepassingen, waaronder de implementatie van de indelingsbeheerder voor presentatie. Het WPF-kernniveau biedt een manier om veel van WPF te gebruiken zonder de overhead van de extra assembly te nemen. Het onderscheid tussen deze niveaus is zeer zelden van belang voor de meest typische toepassingsontwikkelingsscenario's. Over het algemeen moet u de WPF-API's als geheel beschouwen en zich niet bezighouden met het verschil tussen WPF-frameworkniveau en WPF-kernniveau. Mogelijk moet u weten wat het onderscheid op niveau is als uw toepassingsontwerp ervoor kiest om aanzienlijke hoeveelheden functionaliteit op WPF-frameworkniveau te vervangen, bijvoorbeeld als uw algehele oplossing al een eigen implementatie van de samenstelling en indeling van de gebruikersinterface (UI) heeft.

Kiezen van welk element u wilt afleiden

De meest praktische manier om een aangepaste klasse te maken die WPF uitbreidt, is door te afgeleid van een van de WPF-klassen waar u zoveel mogelijk functionaliteit krijgt via de bestaande klassenhiërarchie. In deze sectie vindt u de functionaliteit die wordt geleverd met drie van de belangrijkste elementklassen, zodat u kunt bepalen van welke klasse u wilt overnemen.

Als u een besturingselement implementeert, wat eigenlijk een van de meest voorkomende redenen is voor het afleiden van een WPF-klasse, wilt u waarschijnlijk afleiden van een klasse die praktisch is, een basisklasse voor controlefamilies of ten minste van de Control basisklasse. Zie Overzicht van ontwerp van besturingselementen voor richtlijnen en praktische voorbeelden.

Als u geen besturingselement maakt en moet worden afgeleid van een klasse die hoger is in de hiërarchie, zijn de volgende secties bedoeld als richtlijn voor de kenmerken die in elke basiselementklasse worden gedefinieerd.

Als u een klasse maakt die is afgeleid van DependencyObject, neemt u de volgende functionaliteit over:

  • GetValue en SetValue ondersteuning en algemene eigenschappensysteemondersteuning.

  • Mogelijkheid om afhankelijkheidseigenschappen en gekoppelde eigenschappen te gebruiken die worden geïmplementeerd als afhankelijkheidseigenschappen.

Als u een klasse maakt die is afgeleid van UIElement, erft u de volgende functionaliteit, naast de functionaliteit die wordt geboden door DependencyObject.

  • Basisondersteuning voor eigenschapswaarden met animatie. Zie Animatieoverzichtvoor meer informatie.

  • Basisondersteuning voor invoerevenementen en commanderende ondersteuning. Voor meer informatie, zie Overzicht van invoer en Overzicht van opdrachten.

  • Virtuele methoden die kunnen worden overschreven om informatie te verstrekken aan het layout-systeem.

Als u een klasse maakt die is afgeleid van FrameworkElement, erft u de volgende functionaliteit, naast de functionaliteit die wordt geboden door UIElement.

  • Ondersteuning voor styling en storyboards. Zie Style en Overzicht van Storyboards (Storyboards Overview) voor meer informatie.

  • Ondersteuning voor gegevensbinding. Zie Overzicht van gegevensbindingenvoor meer informatie.

  • Ondersteuning voor dynamische resourceverwijzingen. Zie XAML-resourcesvoor meer informatie.

  • Ondersteuning voor overname van eigenschapswaarden en andere vlaggen in de metagegevens waarmee voorwaarden over eigenschappen voor frameworkservices, zoals gegevensbinding, stijlen of de framework-implementatie van de indeling, worden beschreven. Zie Metagegevens van frameworkeigenschappen voor meer informatie.

  • Het concept van de logische boom. Zie Trees in WPF voor meer informatie.

  • Ondersteuning voor de praktische implementatie op WPF-frameworkniveau van het indelingssysteem, inclusief een OnPropertyChanged onderdrukking waarmee wijzigingen in eigenschappen kunnen worden gedetecteerd die van invloed zijn op de indeling.

Als u een klasse maakt die is afgeleid van ContentElement, erft u de volgende functionaliteit, naast de functionaliteit die wordt geboden door DependencyObject.

Als u een klasse maakt die is afgeleid van FrameworkContentElement, krijgt u de volgende functionaliteit naast die ContentElementvan:

  • Ondersteuning voor styling en storyboards. Zie en Style voor meer informatie.

  • Ondersteuning voor gegevensbinding. Zie Overzicht van gegevensbindingenvoor meer informatie.

  • Ondersteuning voor dynamische resourceverwijzingen. Zie XAML-resourcesvoor meer informatie.

  • Ondersteuning voor overname van eigenschapswaarden en andere vlaggen in de metagegevens waarmee voorwaarden over eigenschappen voor frameworkservices, zoals gegevensbinding, stijlen of de framework-implementatie van de indeling, worden beschreven. Zie Metagegevens van frameworkeigenschappen voor meer informatie.

  • U neemt geen toegang over tot wijzigingen in het indelingssysteem (zoals ArrangeOverride). Implementaties van het indelingssysteem zijn alleen beschikbaar op FrameworkElement. U erft echter een OnPropertyChanged override die veranderingen in eigenschappen kan detecteren die van invloed zijn op de indeling en deze rapporteren aan alle inhoudshosts.

Inhoudsmodellen worden gedocumenteerd voor verschillende klassen. Het inhoudsmodel voor een klasse is een mogelijke factor die u moet overwegen als u een geschikte klasse wilt vinden waaruit moet worden afgeleid. Zie WPF-inhoudsmodel voor meer informatie.

Andere basisklassen

DispatcherObject

DispatcherObject biedt ondersteuning voor het WPF-threadingmodel en maakt het mogelijk dat alle objecten die zijn gemaakt voor WPF-toepassingen worden gekoppeld aan een Dispatcher. Zelfs als u niet bent afgeleid van UIElement, DependencyObject, of Visual, moet u overwegen om van DispatcherObject af te leiden om deze threading-ondersteuning te krijgen. Zie Threading Model voor meer informatie.

Visueel

Visual implementeert het concept van een 2D-object waarvoor in het algemeen visuele presentatie in een grof rechthoekig gebied is vereist. De werkelijke weergave van een bestand Visual vindt plaats in andere klassen (het is niet zelfstandig), maar de Visual klasse biedt een bekend type dat wordt gebruikt door renderingprocessen op verschillende niveaus. Visual implementeert raaktesten, maar het geeft geen gebeurtenissen weer die positieve resultaten van raaktesten rapporteren (deze zijn in UIElement). Zie Visual Layer Programming voor meer informatie.

Invriesbaar

Freezable simuleert onveranderbaarheid in een veranderlijk object door de middelen te bieden om kopieën van het object te genereren wanneer een onveranderbaar object vereist of gewenst is om prestatieredenen. Het Freezable type biedt een gemeenschappelijke basis voor bepaalde grafische elementen, zoals geometrieën en borstels, evenals animaties. Een Freezable is opvallend genoeg geen Visual; het kan eigenschappen bevatten die subeigenschappen worden wanneer de Freezable wordt gebruikt om een eigenschapswaarde van een ander object in te stellen, en deze subeigenschappen kunnen van invloed zijn op de weergave. Zie Overzicht van Freezable Objects voor meer informatie.

Animatable

Animatable is een Freezable afgeleide klasse die specifiek de animatiebesturingslaag en sommige leden van het hulpprogramma toevoegt, zodat momenteel geanimeerde eigenschappen kunnen worden onderscheiden van niet-animatie-eigenschappen.

Beheersing

Control is de beoogde basisklasse voor het type object dat op verschillende wijze een besturingselement of onderdeel wordt aangeduid, afhankelijk van de technologie. Over het algemeen zijn WPF-besturingsklassen klassen die rechtstreeks een UI-besturingselement vertegenwoordigen of nauw deelnemen aan de samenstelling van de controle. De primaire functionaliteit die Control dit mogelijk maakt, is het beheren van sjablonen.

Zie ook