Przegląd Elementy bazy

Wysoki odsetek klas w programie Windows Presentation Foundation (WPF) pochodzi z czterech klas, które są często określane w dokumentacji zestawu SDK jako klasy elementów podstawowych. Te klasy to UIElement, , ContentElementFrameworkElementi FrameworkContentElement. Klasa DependencyObject jest również powiązana, ponieważ jest to wspólna klasa bazowa zarówno, UIElement jak i ContentElement

Podstawowe interfejsy API elementów w klasach WPF

Zarówno UIElement , jak i ContentElement pochodzą z DependencyObjectmetody , za pośrednictwem nieco różnych ścieżek. Podział na tym poziomie dotyczy sposobu użycia elementu UIElement lub ContentElement w interfejsie użytkownika i celu, w jakim celu pełnią one rolę w aplikacji. UIElement Ma Visual również w hierarchii klas, która jest klasą, która uwidacznia obsługę grafiki niższego poziomu bazowej windows Presentation Foundation (WPF). Visual Udostępnia platformę renderowania przez zdefiniowanie niezależnych prostokątnych regionów ekranu. W praktyce w przypadku UIElement elementów, które będą obsługiwać większy model obiektów, mają być renderowane i układy w regionach, które można opisać jako prostokątne regiony ekranu, oraz gdzie con tryb namiotu l jest celowo bardziej otwarty, aby umożliwić różne kombinacje elementów. ContentElement nie pochodzi z Visual; jego model jest taki, że ContentElement będzie używany przez coś innego, takiego jak czytelnik lub osoba przeglądająca, która następnie zinterpretuje elementy i utworzy pełne Visual dane do korzystania z programu Windows Presentation Foundation (WPF). Niektóre UIElement klasy mają być hostami zawartości: zapewniają hosting i renderowanie dla co najmniej jednej ContentElement klasy (DocumentViewer jest przykładem takiej klasy). ContentElement jest używana jako klasa bazowa dla elementów z nieco mniejszymi modelami obiektów i tym bardziej adresuje tekst, informacje lub zawartość dokumentu, która może być hostowana UIElementw obiekcie .

Poziom platformy i poziom podstawowy

UIElement służy jako klasa bazowa dla FrameworkElementklasy , i ContentElement służy jako klasa bazowa dla klasy FrameworkContentElement. Powodem następnego poziomu klas jest obsługa podstawowego poziomu WPF, który jest oddzielony od poziomu platformy WPF, a ten podział istnieje również w jaki sposób interfejsy API są podzielone między zestawy PresentationCore i PresentationFramework. Poziom struktury WPF przedstawia bardziej kompletne rozwiązanie dla podstawowych potrzeb aplikacji, w tym implementację menedżera układów na potrzeby prezentacji. Poziom rdzeniA WPF umożliwia korzystanie z dużej części WPF bez przejmowania nakładu pracy nad dodatkowym zestawem. Rozróżnienie między tymi poziomami bardzo rzadko ma znaczenie dla większości typowych scenariuszy tworzenia aplikacji, a ogólnie należy traktować interfejsy API WPF jako całość, a nie martwić się różnicą między poziomem struktury WPF i podstawowym poziomem WPF. Może być konieczne poznanie różnic na poziomie, jeśli projekt aplikacji zdecyduje się zastąpić znaczne ilości funkcji na poziomie platformy WPF, na przykład jeśli ogólne rozwiązanie ma już własne implementacje kompozycji i układu interfejsu użytkownika.

Wybieranie elementu, z którego ma pochodzić

Najbardziej praktycznym sposobem utworzenia klasy niestandardowej, która rozszerza WPF, jest wyprowadzenie z jednej z klas WPF, w której uzyskasz jak najwięcej żądanych funkcji za pośrednictwem istniejącej hierarchii klas. W tej sekcji wymieniono funkcje, które są dostarczane z trzema najważniejszymi klasami elementów, które ułatwiają podjęcie decyzji o tym, która klasa ma dziedziczyć.

Jeśli implementujesz kontrolkę, która jest naprawdę jedną z bardziej typowych przyczyn wyprowadzania z klasy WPF, prawdopodobnie chcesz pochodzić z klasy, która jest praktyczną kontrolką, klasą bazową rodziny kontrolek lub przynajmniej z klasy bazowej Control . Aby uzyskać wskazówki i praktyczne przykłady, zobacz Omówienie tworzenia kontrolek.

Jeśli nie tworzysz kontrolki i musisz pochodzić z klasy wyższej w hierarchii, poniższe sekcje są przeznaczone jako przewodnik dla cech zdefiniowanych w każdej klasie elementów podstawowych.

Jeśli tworzysz klasę, która pochodzi z DependencyObjectklasy , dziedziczysz następujące funkcje:

  • GetValue obsługa i SetValue ogólna obsługa systemu właściwości.

  • Możliwość używania właściwości zależności i dołączonych właściwości, które są implementowane jako właściwości zależności.

Jeśli tworzysz klasę, która pochodzi z UIElementklasy , dziedziczysz następujące funkcje oprócz tej udostępnionej przez DependencyObjectprogram :

  • Podstawowa obsługa animowanych wartości właściwości. Aby uzyskać więcej informacji, zobacz Omówienie animacji.

  • Podstawowa obsługa zdarzeń wejściowych i obsługa poleceń. Aby uzyskać więcej informacji, zobacz Omówienie danych wejściowych i Omówienie poleceń.

  • Metody wirtualne, które można zastąpić w celu udostępnienia informacji systemowi układu.

Jeśli tworzysz klasę, która pochodzi z FrameworkElementklasy , dziedziczysz następujące funkcje oprócz tej udostępnionej przez UIElementprogram :

  • Obsługa stylów i scenorysów. Aby uzyskać więcej informacji, zobacz Style i Storyboards Overview (Omówienie scenorysów).

  • Obsługa powiązania danych. Aby uzyskać więcej informacji, zobacz Omówienie powiązania danych.

  • Obsługa odwołań do zasobów dynamicznych. Aby uzyskać więcej informacji, zobacz Zasoby XAML.

  • Obsługa dziedziczenia wartości właściwości i inne flagi w metadanych, które ułatwiają zgłaszanie warunków dotyczących właściwości usług platformowych, takich jak powiązanie danych, style lub implementacja układu platformy. Aby uzyskać więcej informacji, zobacz Metadane właściwości struktury.

  • Koncepcja drzewa logicznego. Aby uzyskać więcej informacji, zobacz Drzewa w WPF.

  • Obsługa praktycznej implementacji systemu układów na poziomie struktury WPF, w tym OnPropertyChanged przesłonięcia, które mogą wykrywać zmiany właściwości mających wpływ na układ.

Jeśli tworzysz klasę, która pochodzi z ContentElementklasy , dziedziczysz następujące funkcje oprócz tej udostępnionej przez DependencyObjectprogram :

  • Obsługa animacji. Aby uzyskać więcej informacji, zobacz Omówienie animacji.

  • Podstawowa obsługa zdarzeń wejściowych i obsługa poleceń. Aby uzyskać więcej informacji, zobacz Omówienie danych wejściowych i Omówienie poleceń.

Jeśli tworzysz klasę, która pochodzi z FrameworkContentElementklasy , oprócz tej klasy dostarczanej przez ContentElementprogram uzyskasz następujące funkcje:

  • Obsługa stylów i scenorysów. Aby uzyskać więcej informacji, zobacz Style i Animacja — omówienie.

  • Obsługa powiązania danych. Aby uzyskać więcej informacji, zobacz Omówienie powiązania danych.

  • Obsługa odwołań do zasobów dynamicznych. Aby uzyskać więcej informacji, zobacz Zasoby XAML.

  • Obsługa dziedziczenia wartości właściwości i inne flagi w metadanych, które ułatwiają zgłaszanie warunków dotyczących właściwości usług platformowych, takich jak powiązanie danych, style lub implementacja układu platformy. Aby uzyskać więcej informacji, zobacz Metadane właściwości struktury.

  • Nie dziedziczysz dostępu do modyfikacji systemu układu (takich jak ArrangeOverride). Implementacje systemu układu są dostępne tylko w systemie FrameworkElement. Jednak dziedziczysz OnPropertyChanged przesłonięcia, które mogą wykrywać zmiany właściwości wpływające na układ i raportować je do dowolnych hostów zawartości.

Con tryb namiotu ls są udokumentowane dla różnych klas. Con tryb namiotu l dla klasy jest jednym z możliwych czynników, które należy wziąć pod uwagę, jeśli chcesz znaleźć odpowiednią klasę do uzyskania. Aby uzyskać więcej informacji, zobacz Model zawartości WPF.

Inne klasy bazowe

Dispatcherobject

DispatcherObject Zapewnia obsługę modelu wątkowania WPF i umożliwia skojarzenie wszystkich obiektów utworzonych dla aplikacji WPF z elementem Dispatcher. Nawet jeśli nie pochodzisz z UIElement, DependencyObjectlub Visual, należy rozważyć wyprowadzenie z DispatcherObject , aby uzyskać obsługę tego modelu wątków. Aby uzyskać więcej informacji, zobacz Model wątkowy.

Element wizualny

Visual implementuje koncepcję obiektu 2D, który zwykle wymaga prezentacji wizualnej w mniej więcej prostokątnym regionie. Rzeczywiste renderowanie elementu Visual odbywa się w innych klasach (nie jest samodzielne), ale Visual klasa udostępnia znany typ używany przez procesy renderowania na różnych poziomach. Visual implementuje testowanie trafień, ale nie uwidacznia zdarzeń, które zgłaszają wyniki testów trafień (znajdują się one w UIElementpliku ). Aby uzyskać więcej informacji, zobacz Visual Layer Programming (Programowanie w warstwie wizualnej).

Freezable

Freezable symuluje niezmienność w obiekcie modyfikowalnym, zapewniając środki do generowania kopii obiektu, gdy obiekt niezmienny jest wymagany lub pożądany ze względu na wydajność. Typ Freezable zapewnia wspólną podstawę dla niektórych elementów graficznych, takich jak geometrie i pędzle, a także animacje. W szczególności element nie jest obiektem FreezableVisual; może zawierać właściwości, które stają się podwłaściwościami, gdy Freezable właściwość jest stosowana do wypełnienia wartości właściwości innego obiektu, a te podwłaściwości mogą mieć wpływ na renderowanie. Aby uzyskać więcej informacji, zobacz Omówienie obiektów z możliwością zamrażania.

Animatable

Animatable jest klasą pochodną Freezable , która w szczególności dodaje warstwę kontrolki animacji i niektóre elementy członkowskie narzędzia, dzięki czemu obecnie animowane właściwości mogą być rozróżniane od właściwości nieanimowanych.

Kontrolka

Control jest przeznaczoną klasą bazową dla typu obiektu, który jest inaczej określany jako kontrolka lub składnik, w zależności od technologii. Ogólnie rzecz biorąc, klasy kontrolek WPF to klasy, które bezpośrednio reprezentują kontrolkę interfejsu użytkownika lub ściśle uczestniczą w kompozycji kontrolek. Podstawową funkcją, która Control umożliwia, jest kontrolowanie tworzenia szablonów.

Zobacz też