TabControl.ContentTemplateSelector Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u een op of stelt u een DataTemplateSelector die aangepaste logica biedt voor het kiezen van de sjabloon die wordt gebruikt om de inhoud van het besturingselement weer te geven.
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
Waarde van eigenschap
A ContentTemplateSelector. De standaardwaarde is null.
Voorbeelden
In het volgende voorbeeld wordt de ContentTemplateSelector eigenschap gebruikt om de inhoud van een TabItem andere eigenschap weer te geven, afhankelijk van de woonplaats van de geselecteerde persoon.
<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
Opmerkingen
Normaal gesproken maakt u een DataTemplateSelector wanneer u meer dan één DataTemplate voor hetzelfde type objecten hebt en u uw eigen logica wilt opgeven om een DataTemplate toe te passen op basis van de eigenschappen van elk gegevensobject. Als u objecten van verschillende typen hebt, kunt u de DataType eigenschap instellen op de DataTemplate. Als u dat doet, hoeft u geen DataTemplateSelector. Als u objecten van hetzelfde type maar met verschillende eigenschappen hebt, kunt u ook overwegen een DataTrigger of een gegevensconversieprogramma te gebruiken. Zie Overzicht van gegevens templating voor meer informatie.
Als u een sjabloonkiezer wilt maken, maakt u een klasse die de DataTemplateSelector methode overschrijft en overschrijft SelectTemplate . Nadat uw klasse is gedefinieerd, kunt u een exemplaar van de klasse toewijzen aan de eigenschap sjabloonkiezer van uw element.
Als zowel de ContentTemplateSelector eigenschappen als de ContentTemplate eigenschappen zijn ingesteld, wordt deze eigenschap genegeerd.
XAML-kenmerkgebruik
<object ContentTemplateSelector="{ResourceExtension DataTemplateSelectorClassKey}"/>
Gebruik van XAML-eigenschapselement
<object>
<object.ContentTemplateSelector>
<MyDataTemplateSelectorImplementation .../>
</object.ContentTemplateSelector>
</object>
XAML-waarden
ResourceExtension Een van de volgende opties: StaticResource, of DynamicResource. Zie XAML-resources.
DataTemplateSelectorClassKey De sleutel waarmee de selector-implementatie wordt geïdentificeerd die wordt aangevraagd. De sleutel verwijst naar een afgeleide klasse die een praktische SelectTemplate onderdrukking implementeert. Zie XAML-naamruimten en naamruimtetoewijzingen voor WPF XAML voor informatie over het toewijzen van uw aangepaste klasse. U kunt ook programmatisch een exemplaar van uw DataTemplateSelector klasse als resource toevoegen aan een resourcewoordenlijst.
MyDataTemplateSelectorImplementation Een klasse die is afgeleid van DataTemplateSelector en onderdrukkingen SelectTemplate. Zie XAML-naamruimten en naamruimtetoewijzingen voor WPF XAML voor informatie over het toewijzen van uw aangepaste klasse.
Informatie over afhankelijkheidseigenschappen
| Item | Waarde |
|---|---|
| Id-veld | ContentTemplateSelectorProperty |
Eigenschappen van metagegevens ingesteld op true |
Geen |