ContentControl.ContentTemplateSelector Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft eine Vorlagenauswahl ab, mit der Anwendungsentwickler Auswahllogik für benutzerdefinierte Vorlagen bereitstellen können, oder legt diese fest.
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
Eigenschaftswert
Eine Datenvorlagenauswahl. Der Standardwert ist null
.
- Attribute
Beispiele
Im folgenden Beispiel wird die Verwendung der ContentTemplateSelector-Eigenschaft veranschaulicht. In diesem Beispiel wird das ausgewählte Element in einem ComboBox an die Content -Eigenschaft von Labelgebunden, die von ContentControlerbt. Wenn der Benutzer einen Wert unter 5 auswählt, wird der Wert des ausgewählten Elements in einem schwarzen Quadrat im Labelangezeigt. Wenn der Benutzer einen Wert auswählt, der 5 oder höher ist, wird der Wert in einer grünen Ellipse angezeigt. Im Beispiel wird dies erreicht, indem zwei DataTemplate -Objekte und ein DataTemplateSelector-Objekt erstellt werden, das auf die ContentTemplateSelector -Eigenschaft festgelegt ist und das entsprechende DataTemplate basierend auf dem Wert des ausgewählten Elements auswählt.
<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
Hinweise
In der Regel erstellen Sie eine DataTemplateSelector , wenn Sie über mehrere DataTemplate Objekte für denselben Objekttyp verfügen und Ihre eigene Logik bereitstellen möchten, um basierend auf den Eigenschaften jedes Datenobjekts eine DataTemplate auszuwählen, die angewendet werden soll. Beachten Sie, dass Sie die -Eigenschaft DataTemplatefür festlegen können, wenn Sie über Objekte unterschiedlicher Typen verfügenDataType. Wenn Sie dies tun, ist es nicht erforderlich, eine DataTemplateSelectorzu erstellen. Wenn Sie über Objekte desselben Typs, aber mit unterschiedlichen Eigenschaften verfügen, können Sie auch die Verwendung eines DataTrigger oder eines Datenkonverters in Betracht ziehen. Weitere Informationen finden Sie unter Übersicht über Datenvorlagen.
Um eine Vorlagenauswahl zu erstellen, erstellen Sie eine Klasse, die von DataTemplateSelector der -Methode erbt, und überschreiben Sie sie SelectTemplate . Nachdem Ihre Klasse definiert wurde, können Sie der Vorlagenauswahleigenschaft Ihres Elements eine Instanz der -Klasse zuweisen.
Wenn sowohl die ContentTemplateSelector -Eigenschaft als auch die ContentTemplate -Eigenschaft festgelegt sind, wird diese Eigenschaft ignoriert.
Verwendung von XAML-Attributen
<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>
XAML-Werte
ResourceExtension
Eine Markuperweiterung, die angibt, wie auf die Vorlagenressource verwiesen wird, entweder StaticResource
oder DynamicResource
. Weitere Informationen finden Sie unter XAML-Ressourcen.
TemplateSelectorKey
Der Schlüssel, der die angeforderte Vorlagenauswahl identifiziert. Der Schlüssel bezieht sich auf eine vorhandene Ressource in einem ResourceDictionary.
Informationen zur Abhängigkeitseigenschaft
Bezeichnerfeld | ContentTemplateSelectorProperty |
Metadateneigenschaften auf true festgelegt |
Keine |