ContentControl.ContentTemplateSelector 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个模板选择器,以使应用程序编写器能够提供自定义模板选择逻辑。
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
属性值
数据模板选择器。 默认值是 null
。
- 属性
示例
下面的示例演示如何使用 ContentTemplateSelector 属性。 此示例将 中ComboBoxContent选定的项绑定到 继承自 ContentControl的 Label的 属性。 当用户选择低于 5 的值时,所选项的值将显示在 中的黑色方块中 Label。 当用户选择的值为 5 或更高时,该值将以绿色椭圆显示。 该示例通过创建两 DataTemplate 个 对象和 一个 DataTemplateSelector,该对象设置为 ContentTemplateSelector 属性,并根据所选项的值选择合适的 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
注解
通常,如果针对同一DataTemplate类型的对象有多个对象,并且想要提供自己的逻辑,以便根据每个数据对象的属性选择要DataTemplate应用的 时,会创建 DataTemplateSelector 。 请注意,如果有不同类型的对象, DataType 则可以在 上 DataTemplate设置 属性。 如果这样做,则无需创建 DataTemplateSelector。 此外,如果对象类型相同,但属性不同,则还可以考虑使用 DataTrigger 或 数据转换器。 有关详细信息,请参阅 数据模板化概述。
若要创建模板选择器,请创建继承自 DataTemplateSelector 的类并重写 SelectTemplate 方法。 定义类后,可以将 类的实例分配给元素的模板选择器属性。
如果同时 ContentTemplateSelector 设置了 和 ContentTemplate 属性,则忽略此属性。
XAML 属性用法
<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>
XAML 值
ResourceExtension
一个标记扩展,用于标识如何引用模板资源(或 StaticResource
DynamicResource
)。 请参阅 XAML 资源。
TemplateSelectorKey
标识所请求的模板选择器的键。 键引用 中的 ResourceDictionary现有资源。
依赖项属性信息
标识符字段 | ContentTemplateSelectorProperty |
元数据属性设置为 true |
无 |