【发布时间】:2012-09-18 16:14:14
【问题描述】:
我想用 WPF Treeview 模仿 OSX-Mail 中的 Treeview-Control,但不知道如何开始。 在屏幕截图中,“MAILBOXES”和“SMART MAILBOXES”是文件夹。将鼠标悬停在每个文件夹上会淡入“显示”或“隐藏”按钮。单击该按钮会滑出子项(屏幕截图中的“收件箱”、“发送”和“今天”)。 如何使用 WPF 获得类似的东西?树视图是一个不错的选择吗?
非常感谢!
【问题讨论】:
我想用 WPF Treeview 模仿 OSX-Mail 中的 Treeview-Control,但不知道如何开始。 在屏幕截图中,“MAILBOXES”和“SMART MAILBOXES”是文件夹。将鼠标悬停在每个文件夹上会淡入“显示”或“隐藏”按钮。单击该按钮会滑出子项(屏幕截图中的“收件箱”、“发送”和“今天”)。 如何使用 WPF 获得类似的东西?树视图是一个不错的选择吗?
非常感谢!
【问题讨论】:
StackOverflow 上通常不会回答此类一般性问题。我会试一试,但我只有时间提供您可以做什么的大纲。
我的经验是不惜一切代价避免使用 TreeView。它只是不符合逻辑并且在搜索节点时它很昂贵。
我认为您可以使用 ItemsControl 获得所需的行为,其中 ItemTemplate 是 Expander 控件。 ItemsControl 绑定到代表您的文件夹的对象集合。
然后您可以DataTemplate Expander 的标题来模拟悬停行为。标题将是两个 TextBlocks。一个用于识别扩展器,即“MAILBOXES”,另一个用于“显示”/“隐藏”标签。
本质上,“显示”和“隐藏”是一个 TextBlock,其中文本由 DataTrigger 设置,该 DataTrigger 附加到 ExpanderIsExpanded 属性/强>。如果 IsExpanded 为 true,则将 Text 设置为“隐藏”,如果为 false,则将其设置为“显示”。
然后对于位于每个文件夹中的其余项目,您可以将 ItemsControl 或 ListBox 放在 Expander 内。将 ItemsControl 或 ListBox ItemsSource 绑定到每个文件夹中的项目。然后,您可以使用相应的 ItemTemplate 来设计您选择的那些项目。
【讨论】: