TabControl.ContentTemplateSelector 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
컨트롤의 내용을 표시하는 데 사용할 템플릿을 선택하는 사용자 지정 논리를 제공하는 DataTemplateSelector를 가져오거나 설정합니다.
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
속성 값
ContentTemplateSelector 기본값은 null
입니다.
예제
다음 예제에서는 합니다 ContentTemplateSelector 속성의 내용을 표시 하는 TabItem 선택한 개인의 출생지에 따라 다르게 합니다.
<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
설명
일반적으로 DataTemplateSelector 둘 이상 있는 경우 DataTemplate 선택 하는 사용자 고유의 논리를 제공 하려면 동일한 유형의 개체에 대 한를 DataTemplate 각 데이터 개체의 속성을 기반으로 적용 합니다. 다른 유형의 개체에 있는 경우 설정할 수 있다는 점에 유의 합니다 DataType 속성에는 DataTemplate. 이렇게 할 경우 만들 필요가 없습니다를 DataTemplateSelector입니다. 또한 동일한 형식의 있지만 다른 속성을 사용 하 여 개체에 있으면 수도 있습니다를 사용 하 여를 DataTrigger 또는 데이터 변환기입니다. 자세한 내용은 데이터 템플릿 개요를 참조하세요.
템플릿 선택기를 만들려면에서 상속 되는 클래스를 만듭니다 DataTemplateSelector 재정의 SelectTemplate 메서드. 클래스를 정의한 후에 요소의 템플릿 선택기 속성에는 클래스의 인스턴스를 할당할 수 있습니다.
두 경우는 ContentTemplateSelector 하며 ContentTemplate 속성이 설정 된 후이 속성은 무시 됩니다.
XAML 특성 사용
<object ContentTemplateSelector="{ResourceExtension DataTemplateSelectorClassKey}"/>
XAML 속성 요소 사용
<object>
<object.ContentTemplateSelector>
<MyDataTemplateSelectorImplementation .../>
</object.ContentTemplateSelector>
</object>
XAML 값
ResourceExtension
다음 중 하나: StaticResource
, 또는 DynamicResource
합니다. 참조 XAML 리소스합니다.
DataTemplateSelectorClassKey
선택기 구현을 요청 하 게 식별 하는 키입니다. 키를 유용한 팁을 구현 하는 파생된 클래스를 가리킵니다. SelectTemplate 재정의 합니다. 사용자 지정 클래스를 매핑하는 방법에 대 한 정보를 참조 하세요 XAML 네임 스페이스 및 WPF XAML에 대 한 매핑 Namespace합니다. 인스턴스를 프로그래밍 방식으로 추가할 수 있습니다 프로그램 DataTemplateSelector 리소스 사전 리소스로 클래스입니다.
MyDataTemplateSelectorImplementation
파생 된 클래스 DataTemplateSelector 재정의 및 SelectTemplate합니다. 사용자 지정 클래스를 매핑하는 방법에 대 한 정보를 참조 하세요 XAML 네임 스페이스 및 WPF XAML에 대 한 매핑 Namespace합니다.
종속성 속성 정보
식별자 필드 | ContentTemplateSelectorProperty |
메타 데이터 속성 설정 true |
없음 |