ContentControl.ContentTemplateSelector Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví selektor šablony, který umožňuje zapisovači aplikace poskytnout vlastní logiku výběru šablony.
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
Hodnota vlastnosti
Výběr šablony dat. Výchozí hodnota je null
.
- Atributy
Příklady
Následující příklad ukazuje, jak použít ContentTemplateSelector vlastnost . Tento příklad sváže vybranou položku v objektu ComboBoxContent s vlastností Label, která dědí z ContentControl. Když uživatel vybere hodnotu nižší než 5, zobrazí se hodnota vybrané položky v černém čtverci v objektu Label. Když uživatel vybere hodnotu 5 nebo vyšší, zobrazí se tato hodnota v zelené elipse. Příklad toho dosáhne vytvořením dvou DataTemplate objektů a objektu DataTemplateSelector, který je nastaven na ContentTemplateSelector vlastnost a vybere odpovídající DataTemplate objekt na základě hodnoty vybrané položky.
<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
Poznámky
Obvykle se vytváří DataTemplateSelector , když máte více než jeden DataTemplate pro stejný typ objektů a chcete zadat vlastní logiku pro volbu DataTemplate , která se použije na základě vlastností každého datového objektu. Všimněte si, že pokud máte objekty různých typů, můžete nastavit DataType vlastnost v objektu DataTemplate. Pokud to uděláte, není potřeba vytvářet DataTemplateSelector. Pokud máte objekty stejného typu, ale s různými vlastnostmi, můžete také zvážit použití DataTrigger převaděče dat nebo . Další informace najdete v tématu Přehled šablon dat.
Pokud chcete vytvořit selektor šablony, vytvořte třídu, která dědí z DataTemplateSelector a přepíše metodu SelectTemplate . Po definování třídy můžete přiřadit instanci třídy k vlastnosti selektoru šablony elementu.
ContentTemplateSelector ContentTemplate Pokud jsou vlastnosti i nastaveny, je tato vlastnost ignorována.
Použití atributu XAML
<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>
Hodnoty XAML
ResourceExtension
Rozšíření značek, které určuje, jak odkazovat na prostředek šablony, nebo StaticResource
DynamicResource
. Viz Prostředky XAML.
Klíč výběru šablony
Klíč, který identifikuje požadovaný selektor šablony. Klíč odkazuje na existující prostředek v objektu ResourceDictionary.
Informace o vlastnosti závislosti
Pole Identifikátor | ContentTemplateSelectorProperty |
Vlastnosti metadat nastavené na true |
Žádné |