【问题标题】:Draw a tree/graph with wpf? [Using Canvas or what?]用 wpf 绘制树/图? [使用画布还是什么?]
【发布时间】:2011-01-17 23:51:18
【问题描述】:

我想用数据源构建我自己的控件。这个控件应该画一个简单的二叉树:-)

我应该使用什么作为绘图基础?我应该使用画布还是应该覆盖一些绘制事件方法,如 onRender()?

节点应该是某种用户控件。

谢谢。

【问题讨论】:

    标签: wpf graph canvas tree


    【解决方案1】:

    选择容器应该由您需要的功能驱动。 需要绝对定位时使用 Canvas。

    但是,控件可以是 ItemsControl,您可以在 ItemsPanel 中使用 Canvas。毕竟画布只是为了展示/排列。

    您可以使用 ItemsControlTemplate 为节点设置 DataTemplate。

    看看hierarchical datatemplates at the end of this article

    也许您所要做的就是为树视图控件创建一个模板并将树视图控件子类化以覆盖排列过程。

    你也可以向this approach by Josh Smith学习

    【讨论】:

    • 是的,您可以这样做,但请注意,您的代码现在依赖于模板中存在的画布(具有特定名称)。换句话说:设计师不能简单地替换模板。
    • 在我的控制模板中,我放置了一个画布,我使用这个画布来安排一些内容演示者并显示一些行。我也有一个数据源属性...但是我如何构建一个通用属性?您可以使用任何对象构建树,该对象具有列表作为具有相同类型对象的成员。类人{列出孩子;我希望我的控件检测到树数据源并绘制树...我不想使用一种类型的数据源或引入接口...我该怎么办?
    • 我添加到我的答案中。我的猜测是您可以简单地创建 TreeView 控件的子类。
    • 抱歉,我无法关注您。我有绘制树形图的代码。我使用节点类来计算 x 和 y 值。排列取决于数据...无法更改面板...有一个示例树yworks.com/img/net40/net_collapsible_tree.png
    • 我假设控件正在定位其子级,实际上您的控件与 TreeView 控件相同,只是布局不同。所以我会继承 TreeViewcontrol 来安排子控件/节点并绘制箭头并添加一个包含画布的控件模板以适应定位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多