ContentControl.ContentTemplateSelector Tulajdonság
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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 |