我是C#和WPF的新手,我需要创建一个类似于MS Visio但没有直接用户交互的图表控件。我有树状的分层数据,其节点可以是相同的类型。很像图的顶点本身包含图形(即顶点是子图)。我出于几个原因无法使用Graph#库。
我(自定义)控件的主要要求是:
不幸的是,我不知道如何开始。我尝试了几种方法,比如嵌套ListBoxes,但每种方法都有缺点。你怎么看待嵌套TreeViews并模板化它们?我需要像Canvas容器这样的东西来自由定位我的物品。
你有什么建议吗?非常感谢你提前。
答案 0 :(得分:0)
如果您需要免费的可移动/可拖动物品,您可能需要一定程度的灵活性,而内置控制装置并不能提供。你最好自己构建自己的控件,可能是从提供足够功能的现有控件派生出来的。
因此对于初学者来说,你可以控制一个盒子项目和一个箭头控件。控件需要在容器内可移动和拖动,因此您还需要一个可能来自Canvas的容器。
我真正建议的是看看Model-View-ViewModel技术;他们对于初学者来说可能是令人生畏的,但好处是巨大的。在这种情况下,您将拥有一组代表您的结构的对象;对于初学者来说,所有对象都将具有定义其坐标的X和Y属性。对象在页面上由前面提到的控件表示,从它们的相关属性绑定到对象的属性。对象是ViewModel,控件代表View。
然后,当您使用鼠标移动项目时(代码很容易),控件和对象的属性会自动更新。对象的更多属性可以包括大小,标签以及表示箭头可以连接到对象的位置的捕捉点集合。
箭头可以用相同的概念表示,除了它们将具有关联的对象和捕捉点而不是显式的X和Y坐标;然后根据捕捉点的位置自动计算它们的坐标。
基于这些结构,您可以专门从ViewModel执行操作,例如添加自动连接到其父项的新项目,并基于此更新视图。
这是一个相当广泛的话题,所以我现在应该停下来;我甚至没有推荐什么文章来帮助你入门。可能是Josh Smith关于MVVM主题的任何内容:P