2013-02-27 230 views
2

我有这样一个ListView:造型ListView.SelectedItem - Windows应用商店的应用程序

<ListView ItemsSource="{Binding Source}" SelectionMode="Single" 
ItemTemplate="{StaticResource MyItemTemplate}" 
IsItemClickEnabled="True" ItemClick="ListView_OnItemClick"> 
</ListView> 

我想达到的目标,是风格,/点击到的东西比其他元素不同的是,选择的元素,当选择另一个元素时再返回。对我来说最简单的方法是,如果有某种方法可以更改所选项目的DataTemplate。如果那不可能,任何类型的解决方案都非常感谢。

我试过使用DataTemplateSelector,但我无法得到它的工作。不知道是否在所选项目改变时重新选择模板。

回答

4

DataTemplateSelector旨在用于类型的数据更改。例如,假设您有一个基类,称为和两个继承类教授学生。你可以有一个名为的人包含教授和学生。您将使用DataTemplateSelector在显示教授对象时使用一个数据模板,在显示学生对象时使用另一个数据模板。

DataTemplateSelector的DataTemplate也有可能不是你想要什么,因为他们通常没有什么做的选择。您选中某个项目(支票,紫色边框等)时看到的所有UI元素都是ItemContainer的一部分。在运行时,DataTemplate放置在ItemContainer的内部,您可以通过编辑ContainerTemplate来更改此项。

在Expression Blend中,右键单击您的ListView并选择编辑其他模板 - >编辑生成的项目容器(ItemContainerStyle) - >编辑副本。您需要为您的自定义容器指定一个名称,并且我建议将它保存在应用程序级别而不是当前页面(否则您将无法在其他页面上使用它)。

当您给它一个名称并单击确定后,Blend将切换到您正在编辑容器(而不是页面)的模式。确保你有面板打开(窗口 - >国,如果你没有看到它),你应该看到一堆状态。您要编辑的名称为已选择,它位于名为SelectionStates的组中。

当您完成更改后,点击按钮对象和时间线面板看起来像一个向上箭头的水平线(当你将鼠标悬停在这个按钮,它会说“返回顶部范围改为[Page]“)。现在你又回到编辑页面而不是编辑容器了。运行你的应用程序,你应该看到不同之处。

注意:使用此方法,您可以更改任何有关容器。诸如边框之类的东西,或者使项目变大或变小或在3D空间中倾斜(使用属性窗格中的变换组下的“投影”来倾斜)。尽管如此,您将无法显示或隐藏部分DataTemplate。例如,当客户未被选中时,您将无法隐藏客户的名字。对于这些更改,您可能必须尝试使用​​您自己的自定义DataTemplateSelector。但是我不知道是否有可能在DataTemplateSelector被要求生成模板时检查是否选择了一个项目。

开发支持,设计支持和更多的真棒善良的人:http://bit.ly/winappsupport

+1

啊,我看。这就是我们最终做的顺便说一句,它的工作原理。非常感谢! – 2013-02-28 11:31:50

相关问题