TabControl.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 einen DataTemplateSelector ab, der benutzerdefinierte Logik für die Auswahl der Registerkarte bereitstellt, mit der der Inhalt des Steuerelements angezeigt wird, oder legt diesen fest.
public:
property System::Windows::Controls::DataTemplateSelector ^ ContentTemplateSelector { System::Windows::Controls::DataTemplateSelector ^ get(); void set(System::Windows::Controls::DataTemplateSelector ^ value); };
public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector
Eigenschaftswert
Ein ContentTemplateSelector. Der Standardwert ist null
.
Beispiele
Im folgenden Beispiel wird die ContentTemplateSelector Eigenschaft verwendet, um den Inhalt einer TabItem anderen Person anzuzeigen, abhängig von der Heimatstadt der ausgewählten Person.
<DataTemplate x:Key="DetailTemplate">
<Border Width="300" Height="100" Margin="20"
BorderBrush="Aqua" BorderThickness="1" Padding="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="First Name:"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=FirstName}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Last Name:"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=LastName}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Home Town:"/>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=HomeTown}"/>
</Grid>
</Border>
</DataTemplate>
<DataTemplate x:Key="SeattleTemplate">
<DataTemplate.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="16"/>
</Style>
</DataTemplate.Resources>
<Border Width="300" Height="100" Margin="20"
BorderBrush="DarkSeaGreen" BorderThickness="3" Padding="15">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Please welcome"/>
<DockPanel Grid.Row="0" Grid.Column="1" >
<TextBlock Text="{Binding Path=FirstName}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding Path=LastName}"/>
</DockPanel>
<TextBlock Grid.Row="1" Grid.ColumnSpan="2" Text="from the Emerald City!"/>
</Grid>
</Border>
</DataTemplate>
<!--Bind to the collection MyFriends and use a DataTemplateSelector
to specify the appearance of the content.-->
<TabControl Name="tabCtrl1" Width="400" Height="200"
ItemsSource="{Binding Source={StaticResource MyFriends}}"
ContentTemplateSelector="{StaticResource PersonSelector}"/>
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.ObjectModel;
using System.ComponentModel;
namespace TabControlContentTemplateSelector
{
// Create a class that represents a person.
// This class contains a person's first name, last name,
// and hometown.
public class Person : INotifyPropertyChanged
{
private string firstname;
private string lastname;
private string hometown;
public event PropertyChangedEventHandler PropertyChanged;
public Person()
{
}
public Person(string first, string last, string town)
{
this.firstname = first;
this.lastname = last;
this.hometown = town;
}
public override string ToString()
{
return firstname.ToString();
}
public string FirstName
{
get { return firstname; }
set
{
firstname = value;
OnPropertyChanged("FirstName");
}
}
public string LastName
{
get { return lastname; }
set
{
lastname = value;
OnPropertyChanged("LastName");
}
}
public string HomeTown
{
get { return hometown; }
set
{
hometown = value;
OnPropertyChanged("HomeTown");
}
}
protected void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
}
public class PersonTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
// The content of each TabItem is a Person object.
if (item is Person)
{
Person person = item as Person;
Window win = Application.Current.MainWindow;
// Select one of the DataTemplate objects, based on the
// person's home town.
if (person.HomeTown == "Seattle")
{
return win.FindResource("SeattleTemplate") as DataTemplate;
}
else
{
return win.FindResource("DetailTemplate") as DataTemplate;
}
}
return null;
}
}
Imports System.ComponentModel
Public Class Person
Implements INotifyPropertyChanged
' Events
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
' Methods
Public Sub New()
End Sub
Public Sub New(ByVal first As String, ByVal last As String, ByVal town As String)
Me._firstname = first
Me._lastname = last
Me._hometown = town
End Sub
Private Sub OnPropertyChanged(ByVal info As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
Public Overrides Function ToString() As String
Return Me._firstname.ToString
End Function
' Properties
Public Property FirstName() As String
Get
Return Me._firstname
End Get
Set(ByVal value As String)
Me._firstname = value
Me.OnPropertyChanged("FirstName")
End Set
End Property
Public Property HomeTown() As String
Get
Return Me._hometown
End Get
Set(ByVal value As String)
Me._hometown = value
Me.OnPropertyChanged("HomeTown")
End Set
End Property
Public Property LastName() As String
Get
Return Me._lastname
End Get
Set(ByVal value As String)
Me._lastname = value
Me.OnPropertyChanged("LastName")
End Set
End Property
' Fields
Private _firstname As String
Private _hometown As String
Private _lastname As String
End Class
Public Class PersonTemplateSelector
Inherits DataTemplateSelector
Public Overrides Function SelectTemplate(ByVal item As Object, _
ByVal container As DependencyObject) As DataTemplate
' The content of each TabItem is a Person object.
If TypeOf item Is Person Then
Dim person As Person = item
Dim win As Window = Application.Current.MainWindow
' Select one of the DataTemplate objects, based on the
' person's home town.
If person.HomeTown = "Seattle" Then
Return win.FindResource("SeattleTemplate")
Else
Return win.FindResource("DetailTemplate")
End If
End If
Return Nothing
End Function
End Class
Hinweise
Normalerweise erstellen Sie eine DataTemplateSelector , wenn Sie mehrere DataTemplate Objekte für denselben Typ haben und Ihre eigene Logik angeben möchten, um eine DataTemplate Anwendung basierend auf den Eigenschaften jedes Datenobjekts auszuwählen. Beachten Sie, dass Sie, wenn Sie Objekte verschiedener Typen haben, die DataType Eigenschaft auf der DataTemplate. Wenn Sie dies tun, ist es nicht erforderlich, eine DataTemplateSelector. Darüber hinaus können Sie bei Objekten desselben Typs, aber mit unterschiedlichen Eigenschaften auch die Verwendung eines DataTrigger Datenkonverters in Betracht ziehen. Weitere Informationen finden Sie unter Übersicht über Datenvorlagen.
Zum Erstellen einer Vorlagenauswahl erstellen Sie eine Klasse, die von DataTemplateSelector der SelectTemplate Methode erbt und überschreibt. Nachdem Ihre Klasse definiert wurde, können Sie der Vorlagenauswahleigenschaft des Elements eine Instanz der Klasse zuweisen.
Wenn sowohl die ContentTemplateSelector Eigenschaften als auch die ContentTemplate Eigenschaften festgelegt werden, wird diese Eigenschaft ignoriert.
Verwendung von XAML-Attributen
<object ContentTemplateSelector="{ResourceExtension DataTemplateSelectorClassKey}"/>
Verwendung von XAML-Eigenschaftenelementen
<object>
<object.ContentTemplateSelector>
<MyDataTemplateSelectorImplementation .../>
</object.ContentTemplateSelector>
</object>
XAML-Werte
ResourceExtension
Eine der folgenden: StaticResource
oder DynamicResource
. Siehe XAML-Ressourcen.
DataTemplateSelectorClassKey
Der Schlüssel, der die angeforderte Selektorimplementierung identifiziert. Der Schlüssel bezieht sich auf eine abgeleitete Klasse, die eine praktische SelectTemplate Überschreibung implementiert. Informationen zum Zuordnen Ihrer benutzerdefinierten Klasse finden Sie unter XAML-Namespaces und Namespacezuordnung für WPF-XAML. Sie können auch programmgesteuert eine Instanz Ihrer DataTemplateSelector Klasse als Ressource zu einem Ressourcenwörterbuch hinzufügen.
MyDataTemplateSelectorImplementation
Eine Klasse, die von DataTemplateSelector und außer Kraft gesetzt wird SelectTemplate. Informationen zum Zuordnen Ihrer benutzerdefinierten Klasse finden Sie unter XAML-Namespaces und Namespacezuordnung für WPF-XAML.
Informationen zur Abhängigkeitseigenschaft
Bezeichnerfeld | ContentTemplateSelectorProperty |
Metadateneigenschaften auf true festgelegt |
Keine |