1

我想实现一个屏幕来显示 WP7 中的评论树。每个评论可以有子评论等等。每个子评论将通过缩进在视觉上与其父评论区分开来

IE:

"comment text"
    "Some child comment text"
    "Some child comment text"
        "some child comment text"
"comment text"
    "Some child comment text"

执行此操作的最佳方法是什么?我想让实现尽可能简单,所以最初我想我可以使用单个 ListBox 并以编程方式设置每个评论/ListItem 的填充/边距,具体取决于它在树中的深度。但我似乎无法让它工作。有什么例子、建议、建议等吗?

编辑:做一些额外的阅读,似乎DataTrigger对于这种事情来说是完美的http://www.codeproject.com/Articles/113152/Applying-Data-Templates-Dynamically-by-Type-in ​​-WP7 ...但是 WP7 不支持触​​发器。

我的另一个想法是让 Margin/Padding 成为 Comment 类的属性,然后将数据绑定到该属性……这应该可以,但是我用显示信息污染了我的 Comment 类。关于如何对 Margin/Padding 值进行数据绑定但以某种方式不混合模型和视图代码的任何想法?

4

3 回答 3

2

您必须自己动手,要么从头开始,要么从现有控件中组装一些东西。ListBox 看起来是一个不错的选择。

看看这个 MSDN 线程 (web archive - thread now move/deleted),它有几个关于使用 ListBox 模拟 TreeView 的建议,以及可以System.Windows.Controls.TreeView在 WP7 中使用的声明(我尚未验证)(需要注意的是你也需要System.Windows.Controls.Toolkit)。

由 Shaun Taulbee 撰写的标记答案:

列表框中的树视图行为可以通过集合处理中的一些技巧来模仿。您的课程需要支持的功能是

  • 一个集合,其元素支持检索子集合

  • 类似地能够检测一个元素是否有子集合

  • 在列表框的数据模板中,根据子项的存在以及是否展开,显示堆栈面板的一个元素以进行展开状态

  • 在列表框的数据模板中显示用于缩进的堆栈面板的一个元素,它反映了子项的深度 - 为了最好地完成这一点,您应该有一个代表要绑定到的树数据的平面版本的集合 - 然后当您插入项目时您可以根据刚刚单击的父项的缩进进行缩进

  • 当在列表框中单击一个节点时,您将该节点中的子节点插入到列表框绑定到的平面集合中

  • 当再次单击节点时,子节点将从平面集合中删除

您可以将所有这些封装到一些简洁的类中,以提供一个相当简单的可重用 api,如果您愿意,我会想像。

该线程有相当多的噪音,但在底部有来自 Mark Chamberlain 的评论:

“TreeView 不适合手机,您可以通过其他方式模拟 Treeview,例如,使用 ListBox 项目模板、Pivo​​t 或其他 List 模式。这取决于您将拥有多少级别的树。

“例如,您可以将 ListItem 模板化为包含一个标签和另一个具有相同项目模板的 Listbox。这样做您可以模拟您需要处理的任意多个钻取级别,但一次只能模拟一个分支。”

“您也许可以重新模板化 TreeView(Silverlight 工具包中也提供了源代码),但它不是受支持的方案,您需要做大量工作才能让它在手机上看起来不错从设计和重新模板的角度来看。”

于 2012-04-10T14:40:27.077 回答
0

以下应该是很好的起点,都改变了 ListBox 控件的 ItemTemplate :-

http://3water.wordpress.com/2010/07/25/listbox-on-wp7/

http://weblogs.asp.net/psheriff/archive/2010/10/27/windows-phone-list-box-with-images.aspx

于 2012-04-10T13:49:29.570 回答
0

对于 WP8,您可以使用这个TreeView_WP8

于 2014-02-26T17:11:08.823 回答