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:
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:
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.
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:
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.
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ż
.NET Desktop feedback