我想在WP7中实现一个显示评论树的屏幕。每条评论都可以有孩子评论等。通过缩进
,每个子评论在视觉上与其父评论不同即:
"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不支持触发器。
我的另一个想法是将边缘/填充作为Comment类的属性,然后数据绑定到...这应该可行,但是我正在使用显示信息污染我的Comment类。关于我如何数据绑定边距/填充值但不知何故不混合模型和放大器的任何想法查看代码?
答案 0 :(得分:2)
您必须从头开始,或通过从现有控件中组装一些东西。 ListBox看起来是一个很好的选择。
看一下this MSDN thread (web archive - thread now moved/deleted),它提出了一些关于使用ListBox模拟TreeView的建议,以及一个可以在WP7中使用System.Windows.Controls.TreeView
的声明(我尚未验证)(需要注意)你还需要System.Windows.Controls.Toolkit
)。
由Shaun Taulbee撰写的明确答案:
列表框中的树视图行为可以通过集合处理中的一些智能来模仿。您的课程需要支持的功能是
其元素支持检索子集合的集合
- 列表框的数据模板中的
同样能够检测元素是否具有子集合
- 列表框的数据模板中的
根据子项的存在以及是否展开来显示用于展开状态的堆栈面板的一个元素
显示了用于缩进的stackpanel的一个元素,它反映了子节点的深度 - 为了达到这个目的,你应该有一个表示要绑定到的树数据的平面版本的集合。 - 然后当您插入项目时,您可以根据刚刚单击的父项目的缩进进行缩进
在列表框中单击节点时,您将该节点中的子节点插入到列表框绑定的平面集合中
再次点击该节点时,将从平面集合中删除子项
您可以将所有这些封装到一些简洁的类中,以提供一个相当简单的可重用API,如果您愿意,我可以想象。
This thread有相当多的噪音,但是在谷底张伯伦的评论下面有一个评论:
“TreeView不适合手机,你可以模拟Treeview 在其他方面,例如,使用ListBox项目模板,Pivot或with 其他列表模式。这将取决于树的多少级别 你会的。
“例如,您可以将ListItem模板化为包含标签和 另一个具有相同项目模板的列表框。这样做你可以效仿 尽可能多地钻取你需要处理的级别,但只有一个分支 一时间。“
“您可以重新模板化TreeView(源代码也可用 在Silverlight工具包中),但它不是受支持的方案,并且 你需要做大量的工作才能让它看起来很好 来自设计和手机的手机重新模仿立场。“
答案 1 :(得分: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
答案 2 :(得分:0)
对于WP8,您可以使用此TreeView_WP8