【问题标题】:Styling ListView.SelectedItem - Windows Store App样式化 ListView.SelectedItem - Windows 应用商店应用
【发布时间】:2013-02-27 13:15:28
【问题描述】:

我有一个这样的 ListView:

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

我想要实现的是将选择/单击的元素设置为与其他元素不同的样式,并在选择另一个元素时再次返回。对我来说,最简单的方法是如果有某种方法可以更改所选项目的 DataTemplate。如果那不可能,任何类型的解决方案都非常感谢。

我尝试使用 DataTemplateSelector,但无法正常工作。不确定当所选项目发生变化时是否会重新选择模板。

【问题讨论】:

    标签: c# xaml listview windows-8 windows-store-apps


    【解决方案1】:

    DataTemplateSelector 旨在在数据的类型发生变化时使用。例如,假设您有一个名为 Person 的基类和两个继承类 ProfessorStudent。您可以有一个名为 People 的集合,其中包含教授和学生。您可以使用 DataTemplateSelector 在显示教授对象时使用一个数据模板,而在显示学生对象时使用另一个数据模板。

    DataTemplateSelectorDataTemplate 可能不是您想要的,因为它们通常与选择没有任何关系。您在选择项目时看到的所有 UI 元素(复选标记、紫色边框等)都是 ItemContainer 的一部分。在运行时,DataTemplate 被放置在 ItemContainer 内,您可以通过编辑 ContainerTemplate 来更改它。

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

    在您为其命名并单击“确定”后,Blend 将切换到您正在编辑容器(而不是页面)的模式。确保您打开了 States 面板(Window -> States 如果您没有看到它),您应该会看到一堆状态。您要编辑的文件名为 Selected,它位于名为 SelectionStates 的组中。

    完成更改后,单击 对象和时间轴 面板顶部的按钮,该按钮看起来像带有向上箭头的水平线(当您将鼠标悬停在此按钮上时,说 “将范围返回到 [Page]”)。现在您回到编辑页面而不是编辑容器。运行您的应用程序,您应该会看到差异。

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

    开发支持、设计支持和更多精彩即将推出:http://bit.ly/winappsupport

    【讨论】:

    • 啊,我明白了。顺便说一句,这就是我们最终做的事情,而且它有效。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多