对于多种分层数据的树状可操纵控制

时间:2010-08-27 08:58:56

标签: c# wpf wpf-controls

我是C#和WPF的新手,我需要创建一个类似于MS Visio但没有直接用户交互的图表控件。我有树状的分层数据,其节点可以是相同的类型。很像图的顶点本身包含图形(即顶点是子图)。我出于几个原因无法使用Graph#库。

我(自定义)控件的主要要求是:

  1. 可自由移动/可拖动的项目(代表分层数据)
  2. 项目应具有框布局
  3. 项目可以通过箭头连接
  4. 不幸的是,我不知道如何开始。我尝试了几种方法,比如嵌套ListBoxes,但每种方法都有缺点。你怎么看待嵌套TreeViews并模板化它们?我需要像Canvas容器这样的东西来自由定位我的物品。

    你有什么建议吗?非常感谢你提前。

1 个答案:

答案 0 :(得分:0)

如果您需要免费的可移动/可拖动物品,您可能需要一定程度的灵活性,而内置控制装置并不能提供。你最好自己构建自己的控件,可能是从提供足够功能的现有控件派生出来的。

因此对于初学者来说,你可以控制一个盒子项目和一个箭头控件。控件需要在容器内可移动和拖动,因此您还需要一个可能来自Canvas的容器。

我真正建议的是看看Model-View-ViewModel技术;他们对于初学者来说可能是令人生畏的,但好处是巨大的。在这种情况下,您将拥有一组代表您的结构的对象;对于初学者来说,所有对象都将具有定义其坐标的X和Y属性。对象在页面上由前面提到的控件表示,从它们的相关属性绑定到对象的属性。对象是ViewModel,控件代表View。

然后,当您使用鼠标移动项目时(代码很容易),控件和对象的属性会自动更新。对象的更多属性可以包括大小,标签以及表示箭头可以连接到对象的位置的捕捉点集合。

箭头可以用相同的概念表示,除了它们将具有关联的对象和捕捉点而不是显式的X和Y坐标;然后根据捕捉点的位置自动计算它们的坐标。

基于这些结构,您可以专门从ViewModel执行操作,例如添加自动连接到其父项的新项目,并基于此更新视图。

这是一个相当广泛的话题,所以我现在应该停下来;我甚至没有推荐什么文章来帮助你入门。可能是Josh Smith关于MVVM主题的任何内容:P