This documentation is archived and is not being maintained.

TabControl.ContentTemplateSelector Property

Gets or sets a DataTemplateSelector that provides custom logic for choosing the template that is used to display the content of the control.

Namespace:  System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)

Public Property ContentTemplateSelector As DataTemplateSelector
    <MyDataTemplateSelectorImplementation .../>
<object ContentTemplateSelector="{ResourceExtension DataTemplateSelectorClassKey}"/>

XAML Values


One of the following: StaticResource, or DynamicResource. See Resources Overview.


The key that identifies the selector implementation being requested. The key refers to a derived class that implements a practical SelectTemplate override. For information about how to map your custom class, see XAML Namespaces and Namespace Mapping for WPF XAML. You can also programmatically add an instance of your DataTemplateSelector class as a resource to a resource dictionary.


A class derived from DataTemplateSelector and overrides SelectTemplate. For information about how to map your custom class, see XAML Namespaces and Namespace Mapping for WPF XAML.

Property Value

Type: System.Windows.Controls.DataTemplateSelector
A ContentTemplateSelector. The default is Nothing.

Identifier field


Metadata properties set to true


Typically, you create a DataTemplateSelector when you have more than one DataTemplate for the same type of objects and you want to supply your own logic to choose a DataTemplate to apply based on the properties of each data object. Note that if you have objects of different types, you can set the DataType property on the DataTemplate. If you do that, then there is no need to create a DataTemplateSelector. Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. For more information, see Data Templating Overview.

To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. After your class is defined, you can assign an instance of the class to the template selector property of your element.

If both the ContentTemplateSelector and the ContentTemplate properties are set, then this property is ignored.

The following example uses the ContentTemplateSelector property to display the content of a TabItem differently, depending on the hometown of the selected person.

<DataTemplate x:Key="DetailTemplate">
  <Border Width="300" Height="100" Margin="20"
          BorderBrush="Aqua" BorderThickness="1" Padding="8">
        <ColumnDefinition Width="100"/>
      <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}"/>

<DataTemplate x:Key="SeattleTemplate">
    <Style TargetType="TextBlock">
      <Setter Property="FontSize" Value="16"/>
  <Border Width="300" Height="100" Margin="20"
          BorderBrush="DarkSeaGreen" BorderThickness="3" Padding="15">
        <ColumnDefinition Width="120"/>
      <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}"/>
      <TextBlock Grid.Row="1" Grid.ColumnSpan="2" Text="from the Emerald City!"/>


<!--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}"/>

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")
                Return win.FindResource("DetailTemplate")

            End If
        End If

        Return Nothing
    End Function

End Class

.NET Framework

Supported in: 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.