我需要开发一个WPF自定义控件来显示无线网状网络中节点的布局和连接。用户需要能够拖动节点。如果元素从可用空间中拖出,画布应该长大并且滚动条应该按需要显示。可能需要放大/缩小功能。 我的第一件事就是使用ListBox派生的CustomControl和基于Canvas的ItemsPanelTemplate。为了让事情进展我使用Josh Smiths DragCanvas允许拖动画布的UIElements子元素。我的“节点”类目前不是UIElement派生的(DragCanvas目前正在处理包裹我节点的ListBoxItems)。
1.这是一个有理有据的方法,还是我应该放弃ListBox的想法并进行更低级别的操作?
2.我必须覆盖节点间的链接线 - 目前还不确定如何去解决这个问题(作为ControlTemplate一部分的UIElement类)
3.有些人似乎很头疼Canvases中的滚动条 - 这会成为一个问题吗?
任何一般或具体的建议最受赞赏。 WPF CustomControl设计建议
1
A
回答
1
哇,作为一个控制不坏!
我正在做类似的事情,但并不那么简单。
1)恕我直言,DragCanvas是托管+拖动元素的基本方式。由于你将不得不再次托管标签(节点),弧线和标签(弧线的重量),我认为DragCanvas比自己编写自定义控件更困难。
并非所有事情都可以通过模板化来实现:有时候要比“旧”的方式更像winforms,甚至是混合的方式。 2)如前所述,我会创建一个Canvas派生面板,它将托管多个UIElements(标签,弧等)。所有这些应该由model + viewmodel来管理。这一开始有点困难,但它会在未来给你很多满意和灵活性。
3)我不认为帆布会给你任何头痛!一个充满元素的画布一直是零的大小。这导致那些试图添加滚动查看器的人“头疼”。
相反,Canvas派生类(上面)应该重写MeasureOverride方法,以便其大小适合任何托管对象。但是,你不能使用负坐标(这会导致滚动问题),这有点烦人。
很难用几行描述类似“编辑器”背后的所有工作。这项任务并不容易,问题很多。
希望它有帮助,无论如何。
干杯
相关问题
- 1. WPF/MVVM设计建议
- 2. WPF从CustomControl删除/关闭/处理CustomControl
- 3. OOP设计建议
- 4. C++设计建议
- 5. DB设计建议
- 6. Winforms设计建议
- 7. 钛设计建议
- 8. ListAdapter设计建议
- 9. 表设计建议
- 10. PHP设计建议
- 11. 项目在CustomControl WPF
- 12. SQL表设计建议
- 13. db设计评论/建议
- 14. 事实表设计建议
- 15. ServiceMix包设计的建议?
- 16. 设计建议所需
- 17. MongoDB Schema设计建议
- 18. 建议设计模式
- 19. 设计建议需要
- 20. 家谱设计建议?
- 21. 算法设计建议
- 22. C++类设计建议
- 23. 数据库设计建议
- 24. NHibnerate数据设计建议
- 25. UI设计帮助/建议
- 26. Java GUI设计建议
- 27. 宁静设计的建议?
- 28. NoSQL(Redis)设计建议
- 29. 数据库设计建议
- 30. 建议设计模式?
嗨马里奥 - 感谢您的意见。是的,我同意你对DragCanvas的评论。从你在2)中的意见中可以读到,这意味着你会从ListBox基础中取出并直接从Canvas派生自定义控件?一方面,我看到ListControl或ItemsControl对于选择等是有用的,但是另一方面,它们不一定适合于元素之间存在交互(弧和弧权重)的模型。 – Ricibob
问题本身它是一个ItemsControl映射一组唯一的对象(例如节点),但是您应该将弧与它们的权重进行映射。由于它们不是*相同的控件,因此应该将两个或三个ItemsControl混合在一起,而且我觉得很麻烦,而不是使用自定义解决方案。 我真的很喜欢WPF及其方法,但有时候是一种矫枉过正。 –
好吧我想研究直接从Canvas派生控件并管理对象(节点和弧/链接)我的自我 - 我会看看如何看看,也许看到其他人是否有任何输入。干杯。 – Ricibob