Nyelv

ContentControl.ContentTemplateSelector Tulajdonság

Definíció

Lekéri vagy beállít egy sablonválasztót, amely lehetővé teszi, hogy az alkalmazásíró egyéni sablonkiválasztási logikát biztosítson.

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

Tulajdonság értéke

Adatsablon-választó. Az alapértelmezett érték a null.

Attribútumok

Példák

Az alábbi példa bemutatja, hogyan használhatja a tulajdonságot ContentTemplateSelector . Ez a példa egy adott elem kijelölt elemét ComboBox köti egy ContentLabelolyan tulajdonsághoz, amelytől ContentControlöröklődik. Amikor a felhasználó kiválaszt egy 5 alatti értéket, a kijelölt elem értéke egy fekete négyzetben jelenik meg a Label. Amikor a felhasználó kiválaszt egy 5 vagy annál magasabb értéket, az érték zöld három pontban jelenik meg. A példa ezt úgy éri el, hogy létrehoz két DataTemplate objektumot és egy DataTemplateSelector, amely a ContentTemplateSelector tulajdonságra van állítva, és a kiválasztott elem értéke alapján választja ki a megfelelőt DataTemplate .

<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

Megjegyzések

Általában akkor hoz létre, DataTemplateSelector ha egynél DataTemplate több objektummal rendelkezik ugyanahhoz az objektumtípushoz, és saját logikát szeretne megadni, hogy az egyes adatobjektumok tulajdonságai alapján válasszon ki egy DataTemplate alkalmazást. Vegye figyelembe, hogy ha különböző típusú objektumokkal rendelkezik, beállíthatja a DataType tulajdonságot a DataTemplate. Ha ezt teszi, akkor nem kell létrehoznia egy DataTemplateSelector. Továbbá, ha azonos típusú, de eltérő tulajdonságokkal rendelkező objektumokkal rendelkezik, érdemes lehet egy DataTrigger vagy egy adatkonvertert is használnia. További információ: Data Templating Overview.

Sablonválasztó létrehozásához hozzon létre egy osztályt, amely örökli DataTemplateSelector és felülbírálja a metódust SelectTemplate . Az osztály definiálása után hozzárendelheti az osztály egy példányát az elem sablonválasztó tulajdonságához.

Ha mind a ContentTemplateSelector tulajdonságok, mind a ContentTemplate tulajdonságok be vannak állítva, a rendszer figyelmen kívül hagyja ezt a tulajdonságot.

XAML-attribútumok használata

<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>

XAML-értékek

ResourceExtension Egy korrektúrakiterjesztés, amely azonosítja, hogyan hivatkozhat a sablonerőforrásra, vagy StaticResourceDynamicResource. Lásd : XAML-erőforrások.

TemplateSelectorKey A kért sablonválasztót azonosító kulcs. A kulcs egy meglévő erőforrásra hivatkozik egy ResourceDictionary.

Függőségi tulajdonság adatai

Termék Érték
Azonosító mező ContentTemplateSelectorProperty
Metaadat-tulajdonságok beállítása: true None

A következőre érvényes: