我有一个这样的ListView:
<ListView ItemsSource="{Binding Source}" SelectionMode="Single"
ItemTemplate="{StaticResource MyItemTemplate}"
IsItemClickEnabled="True" ItemClick="ListView_OnItemClick">
</ListView>我想要实现的是,将被选中/单击的元素设置为与其他元素不同的样式,并在选择另一个元素时再次返回。对我来说,最简单的方法是如果有某种方法可以更改所选项目的DataTemplate。如果这是不可能的,任何类型的解决方案都是非常感谢的。
我试着用DataTemplateSelector,但我不能让它工作。不确定当所选项目发生更改时是否会重新选择模板。
发布于 2013-02-28 02:43:37
DataTemplateSelector用于在数据类型发生变化时使用。例如,假设您有一个名为Person的基类,以及两个继承类教授和学生。您可以有一个名为People的集合,其中既包含教授又包含学生。在显示教授对象时,您可以使用DataTemplateSelector来使用一个数据模板,而在显示学生对象时,可以使用另一个数据模板。
DataTemplateSelector和DataTemplate可能不是您想要的,因为它们通常与选择没有任何关系。选中项目时看到的所有UI元素(方格、紫色边框等)是ItemContainer.的一部分在运行时,DataTemplate被放置在ItemContainer,中,您可以通过编辑ContainerTemplate.来更改它
在Expression Blend中,右键单击ListView,然后选择编辑其他模板->编辑生成的项容器(ItemContainerStyle) ->编辑副本。您需要为您的自定义容器指定一个名称,我建议您将其保存在App级别,而不是当前页面(否则您将无法在其他页面上使用它)。
在你给它命名并点击OK之后,Blend将切换到你正在编辑容器(而不是页面)的模式。确保您已经打开了状态面板(如果您看不到它,请打开窗口->状态),您应该会看到一堆状态。您要编辑的文件名为Selected,它位于名为SelectionStates.的组中
完成更改后,单击对象和时间轴面板顶部的按钮,该按钮看起来像一条带有向上箭头的水平线(当您将鼠标悬停在此按钮上时,它将显示“将范围返回到页面”)。现在,您可以返回到编辑页面,而不是编辑容器。运行你的应用程序,你应该会看到不同之处。
注意:使用此方法,您可以更改有关容器的任何内容。例如边框,或者使项目在3D空间中变大或变小或倾斜(使用属性窗格中Transform组下的"Projection“来倾斜)。但是,您将无法显示或隐藏DataTemplate的某些部分。例如,当客户未被选中时,您将无法隐藏该客户的名字。对于这些类型的更改,您可能必须尝试使用您自己的自定义DataTemplateSelector。但我不知道是否可以在要求DataTemplateSelector生成模板时检查项目是否被选中。
开发支持,设计支持和更多令人敬畏的好处即将到来:http://bit.ly/winappsupport
https://stackoverflow.com/questions/15113047
复制相似问题