ContentControl.ContentTemplateSelector Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia selektor szablonu, który umożliwia modułowi zapisywania aplikacji udostępnianie niestandardowej logiki wyboru szablonu.
public:
property System::Windows::Controls::DataTemplateSelector ^ ContentTemplateSelector { System::Windows::Controls::DataTemplateSelector ^ get(); void set(System::Windows::Controls::DataTemplateSelector ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }
[<System.ComponentModel.Bindable(true)>]
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector
Wartość właściwości
Selektor szablonu danych. Wartość domyślna to null
.
- Atrybuty
Przykłady
W poniższym przykładzie pokazano, jak używać ContentTemplateSelector właściwości. W tym przykładzie zaznaczony element jest powiązany z ComboBox Content właściwością Labelobiektu , która dziedziczy z ContentControlklasy . Gdy użytkownik wybierze wartość poniżej 5, wartość wybranego elementu pojawi się w czarnym kwadratzie w elemencie Label. Gdy użytkownik wybierze wartość 5 lub nowszą, zostanie wyświetlona w zielonym wielokropce. W tym przykładzie można to osiągnąć, tworząc dwa DataTemplate obiekty i DataTemplateSelectorelement , który jest ustawiony na ContentTemplateSelector właściwość i wybiera odpowiednie DataTemplate na podstawie wartości wybranego elementu.
<Window.Resources>
<!--Create two DataTemplate objects to be
selected by the DataTemplateSelector.-->
<DataTemplate x:Key="numberTemplate">
<Grid>
<Rectangle Stroke="Black" />
<TextBlock Margin="5" Text="{Binding}" FontSize="18"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="largeNumberTemplate">
<Grid>
<Ellipse Stroke="Green" StrokeThickness="4"/>
<TextBlock Margin="10" Text="{Binding}" FontSize="24"
Foreground="Red" FontWeight="Bold" />
</Grid>
</DataTemplate>
<local:NumberDataTemplateSelector x:Key="numberTemplateSelector"
NumberTemplate="{StaticResource numberTemplate}"
LargeNumberTemplate="{StaticResource largeNumberTemplate}"/>
</Window.Resources>
<StackPanel>
<!--Bind the content of the Label to the selected item
in the ComboBox.-->
<Label Foreground="Black"
Content="{Binding ElementName=numberList, Path=SelectedItem.Content}"
ContentTemplateSelector="{StaticResource numberTemplateSelector}">
</Label>
<ComboBox Name="numberList">
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
<ComboBoxItem>5</ComboBoxItem>
<ComboBoxItem>6</ComboBoxItem>
<ComboBoxItem IsSelected="True">7</ComboBoxItem>
<ComboBoxItem>8</ComboBoxItem>
<ComboBoxItem>9</ComboBoxItem>
<ComboBoxItem>10</ComboBoxItem>
</ComboBox>
</StackPanel>
public class NumberDataTemplateSelector : DataTemplateSelector
{
public DataTemplate NumberTemplate { get; set; }
public DataTemplate LargeNumberTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
// Null value can be passed by IDE designer
if (item == null) return null;
var num = Convert.ToInt32((string)item);
// Select one of the DataTemplate objects, based on the
// value of the selected item in the ComboBox.
if (num < 5)
{
return NumberTemplate;
}
else
{
return LargeNumberTemplate;
}
}
}
Public Class NumberDataTemplateSelector
Inherits DataTemplateSelector
Public Property NumberTemplate As DataTemplate
Public Property LargeNumberTemplate As DataTemplate
Public Overrides Function SelectTemplate(ByVal item As Object, _
ByVal container As DependencyObject) As DataTemplate
' Nothing can be passed by IDE designer
if (item Is Nothing) Then
Return Nothing
End If
Dim num = Convert.ToInt32(CStr(item))
' Select one of the DataTemplate objects, based on the
' value of the selected item in the ComboBox.
If num < 5 Then
Return NumberTemplate
Else
Return LargeNumberTemplate
End If
End Function 'SelectTemplate
End Class
Uwagi
Zazwyczaj tworzy się obiekt DataTemplateSelector , jeśli masz więcej niż jeden DataTemplate dla tego samego typu obiektów i chcesz podać własną logikę, aby wybrać DataTemplate obiekt do zastosowania na podstawie właściwości każdego obiektu danych. Należy pamiętać, że jeśli masz obiekty różnych typów, możesz ustawić DataType właściwość w obiekcie DataTemplate. Jeśli to zrobisz, nie ma potrzeby tworzenia elementu DataTemplateSelector. Ponadto, jeśli masz obiekty tego samego typu, ale z różnymi właściwościami, możesz również rozważyć użycie konwertera DataTrigger danych lub . Aby uzyskać więcej informacji, zobacz Omówienie tworzenia szablonów danych.
Aby utworzyć selektor szablonu, utwórz klasę dziedziczą po DataTemplateSelector metodzie i przesłaniają SelectTemplate ją. Po zdefiniowaniu klasy można przypisać wystąpienie klasy do właściwości selektora szablonu elementu.
Jeśli właściwości ContentTemplateSelector i są ContentTemplate ustawione, ta właściwość jest ignorowana.
Użycie atrybutu języka XAML
<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>
Wartości XAML
Rozszerzenie zasobu
Rozszerzenie znaczników identyfikujące sposób odwołowania się do zasobu szablonu lub StaticResource
DynamicResource
. Zobacz Zasoby XAML.
TemplateSelectorKey
Klucz identyfikujący żądany selektor szablonu. Klucz odwołuje się do istniejącego zasobu w obiekcie ResourceDictionary.
Informacje dotyczące właściwości zależności
Pole identyfikatora | ContentTemplateSelectorProperty |
Właściwości metadanych ustawione na true |
Brak |