<Window x:Class="TabControlContentTemplateSelector.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:src="clr-namespace:TabControlContentTemplateSelector" Title="TabControlContentTemplateSelector"> <Window.Resources> <src:People x:Key="MyFriends"/> <DataTemplate x:Key="DetailTemplate"> <StackPanel> <TextBlock Text="First Name:"/> <TextBlock Text="{Binding Path=FirstName}"/> <TextBlock Text="Last Name:"/> <TextBlock Text="{Binding Path=LastName}"/> </StackPanel> </DataTemplate> <DataTemplate x:Key="SeattleTemplate"> <DataTemplate.Resources> <Style TargetType="TextBlock"> <Setter Property="FontSize" Value="16"/> </Style> </DataTemplate.Resources> <StackPanel> <TextBlock Text="Please welcome"/> <TextBlock Text="{Binding Path=FirstName}"/> <TextBlock Text=" "/> <TextBlock Text="{Binding Path=LastName}"/> </StackPanel> </DataTemplate> <src:EmployeeTemplateSelector x:Key="EmployeeSelector"/> </Window.Resources> <StackPanel VerticalAlignment="Center"> <TabControl Name="tabCtrl1" Width="400" Height="200" ItemsSource="{Binding Source={StaticResource MyFriends}}" ContentTemplateSelector="{StaticResource EmployeeSelector}"/> <Button Width="100" Margin="10" Name="infoBtn" Click="infoBtn_Click"> _Get Information </Button> </StackPanel> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.ComponentModel; using System; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Media; using System.Windows.Shapes; using System.Collections.ObjectModel; namespace TabControlContentTemplateSelector { public class Employee : INotifyPropertyChanged { private string firstname; private string lastname; public event PropertyChangedEventHandler PropertyChanged; public Employee() { } public Employee(string first, string last) { this.firstname = first; this.lastname = last; } 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"); } } protected void OnPropertyChanged(string info) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(info)); } } } public class People : ObservableCollection<Employee> { public People() : base() { Add(new Employee("A", "B")); Add(new Employee("C", "D")); Add(new Employee("E", "F")); Add(new Employee("G", "H")); Add(new Employee("I", "J")); } } public partial class Window1 : System.Windows.Window { public Window1() { InitializeComponent(); } void infoBtn_Click(object sender, RoutedEventArgs e) { if (tabCtrl1.SelectedContent is Employee) { Employee selectedEmployee = tabCtrl1.SelectedContent as Employee; StringBuilder personInfo = new StringBuilder(); personInfo.Append(selectedEmployee.FirstName); personInfo.Append(" "); personInfo.Append(selectedEmployee.LastName); MessageBox.Show(personInfo.ToString()); } } } public class EmployeeTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (item is Employee) { Employee person = item as Employee; Window win = Application.Current.MainWindow; return win.FindResource("SeattleTemplate") as DataTemplate; //return win.FindResource("DetailTemplate") as DataTemplate; } return null; } } }