ContentControl.ContentTemplateSelector Özellik

Tanım

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

Şunlara uygulanır