DataTemplateSelector旨在在数据类型更改时使用。例如,假设您有一个名为Person的基类和两个继承的类Professor和Student。您可以有一个名为People的集合,其中包含教授和学生。您将使用DataTemplateSelector在显示教授对象时使用一个数据模板,而另一个用于显示学生对象。
DataTemplateSelector和DataTemplate可能不是您想要的,因为它们通常与选择没有任何关系。您在选择项目时看到的所有 UI 元素(复选、紫色边框等)都是ItemContainer的一部分。在运行时,DataTemplate被放置在ItemContainer内,您可以通过编辑ContainerTemplate来更改它。
在 Expression Blend 中,右键单击 ListView 并选择Edit Additional Templates -> Edit Generated Item Container (ItemContainerStyle) -> Edit a Copy。您需要为自定义容器命名,我建议将其保存在应用级别而不是当前页面(否则您将无法在其他页面上使用它)。
给它一个名称并单击确定后,Blend 将切换到您正在编辑容器(而不是页面)的模式。确保您打开了状态面板(Window -> States如果您没有看到它),您应该会看到一堆状态。您要编辑的那个称为Selected,它位于名为SelectionStates的组中。
完成更改后,单击“对象和时间轴”面板顶部的按钮,该按钮看起来像带有向上箭头的水平线(当您将鼠标悬停在此按钮上时,它会显示“将范围返回到 [页面]”) . 现在您回到编辑页面而不是编辑容器。运行您的应用程序,您应该会看到差异。
注意:使用此方法,您可以更改有关容器的任何内容。诸如边框之类的东西,或者使项目更大或更小或在 3D 空间中倾斜(使用属性窗格中“变换”组下的“投影”来倾斜)。但是,您将无法显示或隐藏 DataTemplate 的某些部分。例如,当客户未被选中时,您将无法隐藏他们的名字。对于这些类型的更改,您可能必须尝试使用您自己的自定义 DataTemplateSelector。但我不知道是否可以在要求 DataTemplateSelector 生成模板时检查是否选择了某个项目。
开发支持、设计支持和更多的好处:http: //bit.ly/winappsupport