Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

ContentControl.ContentTemplateSelector-Eigenschaft

 

Veröffentlicht: Oktober 2016

Ruft ab oder legt den Selektor für eine Vorlage, mit der Anwendungsentwickler Auswahllogik für benutzerdefinierte Vorlagen bereitstellen kann.

Namespace:   System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)

[BindableAttribute(true)]
public DataTemplateSelector ContentTemplateSelector { get; set; }

Eigenschaftswert

Type: System.Windows.Controls.DataTemplateSelector

Eine Datenvorlagenauswahl. Der Standardwert ist null.

Normalerweise erstellen Sie eine DataTemplateSelector wenn Sie haben mehr als eine DataTemplate für den gleichen Typ von Objekten, und Sie möchten eigene Logik für die Auswahl einer DataTemplate Anwenden auf Grundlage der Eigenschaften der einzelnen Datenobjekte. Hinweis, der bei Objekten verschiedener Typen lassen sich die DataType Eigenschaft auf die DataTemplate. Wenn dies der Fall, die, besteht keine Notwendigkeit zum Erstellen einer DataTemplateSelector. Außerdem, wenn Sie Objekte des gleichen Typs und mit verschiedenen Eigenschaften verfügen, Sie können auch in Betracht ein DataTrigger oder ein Datenkonverter. Weitere Informationen finden Sie unter Übersicht über Datenvorlagen.

Um eine Vorlagenauswahl erstellen möchten, erstellen Sie eine Klasse, die von erbt DataTemplateSelector und überschreiben die SelectTemplate Methode. Nachdem die Klasse definiert ist, können Sie die Template-Selektor-Eigenschaft des Elements eine Instanz der Klasse zuweisen.

Wenn die ContentTemplateSelector und die ContentTemplate Eigenschaften werden festgelegt, wird diese Eigenschaft ignoriert.

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

ResourceExtension

Eine Markuperweiterung, die auf der Dialogfeldvorlagen-Ressource verweisen, entweder identifiziert StaticResource oder DynamicResource. Finden Sie unter XAML-Ressourcen.

TemplateSelectorKey

Der Schlüssel, der die angeforderte Vorlagenauswahl identifiziert. Der Schlüssel verweist auf eine vorhandene Ressource in eine ResourceDictionary.

Feld-ID

ContentTemplateSelectorProperty

Festgelegte Metadateneigenschaften true

Keine

Im folgenden Beispiel wird die Verwendung der ContentTemplateSelector-Eigenschaft veranschaulicht. In diesem Beispiel bindet das ausgewählte Element in einer ComboBox die Content Eigenschaft ein Label, erbt von ContentControl. Wenn der Benutzer einen kleineren Wert als 5 auswählt, wird der Wert des ausgewählten Elements in einem schwarzen Quadrat in der Label. Der Benutzer einen Wert auswählt, 5 oder höher ist, wird der Wert in einer grünen Ellipse angezeigt. Das Beispiel stellt zu diesem Zweck erstellen zwei DataTemplate Objekte und eine DataTemplateSelector, festgelegt wird, um die ContentTemplateSelector Eigenschaft und wählt den entsprechenden DataTemplate basierend auf dem Wert des ausgewählten Elements.

<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:NumderDataTemplateSelector x:Key="numberTemplateSelector"/>

</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 NumderDataTemplateSelector : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        string numberStr = item as string;

        if (numberStr != null)
        {
            int num;
            Window win = Application.Current.MainWindow;

            try
            {
                num = Convert.ToInt32(numberStr);
            }
            catch
            {
                return null;
            }

            // Select one of the DataTemplate objects, based on the 
            // value of the selected item in the ComboBox.
            if (num < 5)
            {
                return win.FindResource("numberTemplate") as DataTemplate;
            }
            else
            {
                return win.FindResource("largeNumberTemplate") as DataTemplate;

            }
        }

        return null;
    }

}

.NET Framework
Verfügbar seit 3.0
Zurück zum Anfang
Anzeigen: