ContentControl.ContentTemplateSelector Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Uygulama yazıcının özel şablon seçimi mantığı sağlamasına olanak tanıyan bir şablon seçici alır veya ayarlar.
public:
property System::Windows::Controls::DataTemplateSelector ^ ContentTemplateSelector { System::Windows::Controls::DataTemplateSelector ^ get(); void set(System::Windows::Controls::DataTemplateSelector ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }
[<System.ComponentModel.Bindable(true)>]
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector
Özellik Değeri
Veri şablonu seçicisi.
null
varsayılan değerdir.
- Öznitelikler
Örnekler
Aşağıdaki örnekte özelliğinin nasıl kullanılacağı gösterilmektedir ContentTemplateSelector . Bu örnek, ComboBox içindeki seçili öğeyi Content öğesinden ContentControldevralan bir Labelöğesinin özelliğine bağlar. Kullanıcı 5'in altında bir değer seçtiğinde, seçili öğenin değeri içinde siyah bir karede Labelgörünür. Kullanıcı 5 veya daha yüksek bir değer seçtiğinde, değer yeşil bir elips içinde görünür. Örnek bunu, özelliğine ContentTemplateSelector ayarlanmış ve seçili öğenin değerine göre uygun DataTemplate olanı seçen iki DataTemplate nesne ve bir DataTemplateSelectoroluşturarak gerçekleştirir.
<Window.Resources>
<!--Create two DataTemplate objects to be
selected by the DataTemplateSelector.-->
<DataTemplate x:Key="numberTemplate">
<Grid>
<Rectangle Stroke="Black" />
<TextBlock Margin="5" Text="{Binding}" FontSize="18"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="largeNumberTemplate">
<Grid>
<Ellipse Stroke="Green" StrokeThickness="4"/>
<TextBlock Margin="10" Text="{Binding}" FontSize="24"
Foreground="Red" FontWeight="Bold" />
</Grid>
</DataTemplate>
<local:NumberDataTemplateSelector x:Key="numberTemplateSelector"
NumberTemplate="{StaticResource numberTemplate}"
LargeNumberTemplate="{StaticResource largeNumberTemplate}"/>
</Window.Resources>
<StackPanel>
<!--Bind the content of the Label to the selected item
in the ComboBox.-->
<Label Foreground="Black"
Content="{Binding ElementName=numberList, Path=SelectedItem.Content}"
ContentTemplateSelector="{StaticResource numberTemplateSelector}">
</Label>
<ComboBox Name="numberList">
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
<ComboBoxItem>5</ComboBoxItem>
<ComboBoxItem>6</ComboBoxItem>
<ComboBoxItem IsSelected="True">7</ComboBoxItem>
<ComboBoxItem>8</ComboBoxItem>
<ComboBoxItem>9</ComboBoxItem>
<ComboBoxItem>10</ComboBoxItem>
</ComboBox>
</StackPanel>
public class NumberDataTemplateSelector : DataTemplateSelector
{
public DataTemplate NumberTemplate { get; set; }
public DataTemplate LargeNumberTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
// Null value can be passed by IDE designer
if (item == null) return null;
var num = Convert.ToInt32((string)item);
// Select one of the DataTemplate objects, based on the
// value of the selected item in the ComboBox.
if (num < 5)
{
return NumberTemplate;
}
else
{
return LargeNumberTemplate;
}
}
}
Public Class NumberDataTemplateSelector
Inherits DataTemplateSelector
Public Property NumberTemplate As DataTemplate
Public Property LargeNumberTemplate As DataTemplate
Public Overrides Function SelectTemplate(ByVal item As Object, _
ByVal container As DependencyObject) As DataTemplate
' Nothing can be passed by IDE designer
if (item Is Nothing) Then
Return Nothing
End If
Dim num = Convert.ToInt32(CStr(item))
' Select one of the DataTemplate objects, based on the
' value of the selected item in the ComboBox.
If num < 5 Then
Return NumberTemplate
Else
Return LargeNumberTemplate
End If
End Function 'SelectTemplate
End Class
Açıklamalar
Genellikle, aynı nesne türü için birden DataTemplate fazla nesneniz olduğunda ve her veri nesnesinin özelliklerine göre uygulanacak bir DataTemplate öğesini seçmek için kendi mantığınızı sağlamak istediğinizde bir oluşturursunuzDataTemplateSelector. Farklı türlerdeki nesneleriniz varsa özelliğini üzerinde ayarlayabileceğinizi DataTypeDataTemplateunutmayın. Bunu yaparsanız, oluşturmanıza DataTemplateSelectorgerek yoktur. Ayrıca, aynı türde ancak farklı özelliklere sahip nesneleriniz varsa, veya DataTrigger veri dönüştürücüsü kullanmayı da göz önünde bulundurabilirsiniz. Daha fazla bilgi için bkz. Veri Şablon oluşturmaya genel bakış.
Şablon seçici oluşturmak için yöntemini devralan ve geçersiz kılan DataTemplateSelectorSelectTemplate bir sınıf oluşturun. Sınıfınız tanımlandıktan sonra, öğesinin şablon seçici özelliğine sınıfının bir örneğini atayabilirsiniz.
Hem hem de ContentTemplateSelectorContentTemplate özellikleri ayarlanırsa, bu özellik yoksayılır.
XAML Öznitelik Kullanımı
<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>
XAML Değerleri
ResourceExtension
Veya DynamicResource
şablon kaynağına StaticResource
başvurmayı tanımlayan bir işaretleme uzantısı. Bkz . XAML Kaynakları.
TemplateSelectorKey
İstenen şablon seçiciyi tanımlayan anahtar. Anahtar, içinde var olan bir ResourceDictionarykaynağa başvurur.
Bağımlılık Özelliği Bilgileri
Tanımlayıcı alanı | ContentTemplateSelectorProperty |
Meta veri özellikleri olarak ayarlandı true |
Hiçbiri |