Udostępnij za pośrednictwem


Model zawartości WPF

Windows Presentation Foundation (WPF) to platforma prezentacji, która udostępnia wiele kontrolek i typów podobnych do kontrolek, których głównym celem jest wyświetlanie różnych typów zawartości. Aby określić, której kontrolki użyć lub z której kontrolki dziedziczyć, należy zrozumieć, jakie rodzaje obiektów konkretna kontrolka może najlepiej wyświetlać.

W tym temacie przedstawiono podsumowanie modelu zawartości dla kontrolek i typów przypominających kontrolkę WPF. Model zawartości opisuje zawartość, która może być używana w kontrolce. W tym temacie wymieniono również właściwości zawartości dla każdego modelu zawartości. Właściwość zawartości jest właściwością używaną do przechowywania zawartości obiektu.

Klasy zawierające dowolną zawartość

Niektóre kontrolki mogą zawierać obiekt dowolnego typu, taki jak ciąg, obiekt DateTime lub UIElement, który jest kontenerem dla dodatkowych elementów. Na przykład Button może zawierać obraz i jakiś tekst; lub CheckBox może zawierać wartość DateTime.Now.

WPF ma cztery klasy, które mogą zawierać dowolną zawartość. W poniższej tabeli wymieniono klasy dziedziczone z Control.

Klasa zawierająca dowolną zawartość Zawartość
ContentControl Pojedynczy dowolny obiekt.
HeaderedContentControl Nagłówek i pojedynczy element, z których oba są dowolnymi obiektami.
ItemsControl Kolekcja dowolnych obiektów.
HeaderedItemsControl Nagłówek i kolekcja elementów, z których wszystkie są dowolnymi obiektami.

Kontrolki dziedziczone z tych klas mogą zawierać ten sam typ zawartości i traktować zawartość w taki sam sposób. Poniższa ilustracja przedstawia jedną kontrolkę z każdego modelu zawartości zawierającego obraz i tekst:

Zrzut ekranu przedstawiający cztery różne kontrolki— jeden z każdego modelu zawartości.

Kontrolki zawierające pojedynczy dowolny obiekt

Klasa ContentControl zawiera pojedynczy fragment dowolnej zawartości. Właściwość jego zawartości to Content. Następujące kontrolki dziedziczą po ContentControl i używają modelu zawartości:

Na poniższej ilustracji przedstawiono cztery przyciski, których Content jest ustawiona na ciąg, obiekt DateTime, Rectanglei Panel, który zawiera Ellipse i TextBlock:

Zrzut ekranu przedstawiający cztery przyciski z różnymi typami zawartości.

Aby zapoznać się z przykładem ustawiania właściwości Content, zobacz ContentControl.

Kontrolki zawierające nagłówek i pojedynczy dowolny obiekt

Klasa HeaderedContentControl dziedziczy z ContentControl i wyświetla zawartość z nagłówkiem. Dziedziczy właściwość zawartości Contentz ContentControl i definiuje właściwość Header typu Object; w związku z tym oba mogą być dowolnym obiektem.

Następujące kontrolki dziedziczą po HeaderedContentControl i używają modelu zawartości:

Na poniższej ilustracji przedstawiono dwa obiekty TabItem. Pierwszy TabItem ma obiekty UIElement jako Header i Content. Header jest ustawione na StackPanel zawierające Ellipse i TextBlock. Content jest ustawione na StackPanel, które zawiera TextBlock i Label. Drugi TabItem zawiera ciąg w Header i TextBlock w Content.

TabControl używający różnych typów we właściwości Header.

Aby zapoznać się z przykładem tworzenia obiektów TabItem, zobacz HeaderedContentControl.

Kontrolki zawierające kolekcję dowolnych obiektów

Klasa ItemsControl dziedziczy z Control i może zawierać wiele elementów, takich jak ciągi, obiekty lub inne elementy. Jego właściwości to ItemsSource i Items. ItemsSource jest zwykle używana do wypełniania ItemsControl kolekcją danych. Jeśli nie chcesz używać kolekcji do wypełniania ItemsControl, możesz dodać elementy przy użyciu właściwości Items.

Następujące kontrolki dziedziczą po ItemsControl i używają modelu zawartości:

Poniższa ilustracja przedstawia ListBox, która zawiera następujące typy elementów:

Zrzut ekranu przedstawiający pole ListBox z czterema typami zawartości.

Kontrolki zawierające nagłówek i kolekcję dowolnych obiektów

Klasa HeaderedItemsControl dziedziczy z ItemsControl i może zawierać wiele elementów, takich jak ciągi, obiekty lub inne elementy oraz nagłówek. Dziedziczy on właściwości zawartości ItemsControl, ItemsSourcei Itemsoraz definiuje właściwość Header, która może być dowolnym obiektem.

Następujące kontrolki dziedziczą po HeaderedItemsControl i używają modelu zawartości:

Klasy zawierające kolekcję obiektów UIElement

Klasa Panel pozycjonuje i rozmieszcza obiekty podrzędne UIElement. Właściwość jego zawartości to Children.

Następujące klasy dziedziczą klasę Panel i używają jej modelu zawartości:

Aby uzyskać więcej informacji, zobacz Omówienie paneli.

Klasy wpływające na wygląd elementu UIElement

Klasa Decorator stosuje efekty wizualne do pojedynczego podrzędnego UIElementlub wokół niego. Właściwość jego zawartości to Child. Następujące klasy dziedziczą po Decorator i używają jej modelu zawartości:

Na poniższej ilustracji przedstawiono TextBox, który ma (ozdobiony) Border wokół niego.

TextBox z czarnym obramowaniem
TextBlock z obramowaniem

Klasy, które dostarczają wizualną informację zwrotną na temat elementu UIElement

Klasa Adorner udostępnia użytkownikowi wizualne wskazówki. Na przykład użyj Adorner, aby dodać do elementów uchwyty funkcjonalne lub udostępnić informacje o stanie kontrolki. Klasa Adorner udostępnia ramy, które umożliwiają tworzenie własnych zdobników. WPF nie zapewnia żadnych zaimplementowanych modułów adoratorów. Aby uzyskać więcej informacji, zobacz Adorners Overview.

Klasy, które umożliwiają użytkownikom wprowadzanie tekstu

WPF udostępnia trzy podstawowe kontrolki, które umożliwiają użytkownikom wprowadzanie tekstu. Każda kontrolka wyświetla tekst inaczej. W poniższej tabeli wymieniono te trzy kontrolki związane z tekstem, ich możliwości podczas wyświetlania tekstu oraz ich właściwości zawierające tekst kontrolki.

Kontrola Tekst jest wyświetlany jako Atrybut zawartości
TextBox Zwykły tekst Text
RichTextBox Sformatowany tekst Document
PasswordBox Tekst ukryty (znaki są maskowane) Password

Klasy, które wyświetlają tekst

Kilka klas może służyć do wyświetlania zwykłego lub sformatowanego tekstu. Za pomocą TextBlock można wyświetlać małe ilości tekstu. Jeśli chcesz wyświetlić duże ilości tekstu, użyj kontrolek FlowDocumentReader, FlowDocumentPageViewerlub FlowDocumentScrollViewer.

TextBlock ma dwie właściwości zawartości: Text i Inlines. Jeśli chcesz wyświetlić tekst używający spójnego formatowania, właściwość Text jest często najlepszym wyborem. Jeśli planujesz używać innego formatowania w całym tekście, użyj właściwości Inlines. Właściwość Inlines jest kolekcją obiektów Inline, które określają sposób formatowania tekstu.

W poniższej tabeli wymieniono właściwość zawartości dla klas FlowDocumentReader, FlowDocumentPageVieweri FlowDocumentScrollViewer.

Kontrola Atrybut zawartości Typ właściwości zawartości
FlowDocumentPageViewer Dokument IDocumentPaginatorSource
FlowDocumentReader Dokument FlowDocument
FlowDocumentScrollViewer Dokument FlowDocument

FlowDocument implementuje interfejs IDocumentPaginatorSource; dlatego wszystkie trzy klasy mogą przyjmować FlowDocument jako zawartość.

Klasy formatujące tekst

TextElement i powiązane z nią klasy umożliwiają formatowanie tekstu. TextElement obiekty zawierają i formatują tekst w obiektach TextBlock i FlowDocument. Dwa podstawowe typy obiektów TextElement są elementami Block i elementami Inline. Element Block reprezentuje blok tekstu, taki jak akapit lub lista. Element Inline reprezentuje część tekstu w bloku. Wiele klas Inline określa formatowanie tekstu, do którego są stosowane. Każdy TextElement ma własny model zawartości. Aby uzyskać więcej informacji, zobacz TextElement Content Model Overview.

Zobacz też

  • Zaawansowane