WPF客户控制设计建议

WPF客户控制设计建议,wpf,custom-controls,Wpf,Custom Controls,我需要开发一个WPF自定义控件来显示无线网状网络中节点的布局和连接。用户需要能够拖动节点。如果元素被拖出可用空间,画布应该增长,滚动条应该根据需要显示。可能需要放大/缩小功能。 我的第一个想法是使用ListBox派生的CustomControl和基于画布的ItemsPanelTemplate。为了让东西移动,我使用Josh Smith的DragCanvas,它允许画布的子元素被拖动。我的“节点”类当前不是UIElement派生的(DragCanvas当前正在处理包装我的节点的ListBoxIte

我需要开发一个WPF自定义控件来显示无线网状网络中节点的布局和连接。用户需要能够拖动节点。如果元素被拖出可用空间,画布应该增长,滚动条应该根据需要显示。可能需要放大/缩小功能。 我的第一个想法是使用ListBox派生的CustomControl和基于画布的ItemsPanelTemplate。为了让东西移动,我使用Josh Smith的DragCanvas,它允许画布的子元素被拖动。我的“节点”类当前不是UIElement派生的(DragCanvas当前正在处理包装我的节点的ListBoxItems)。
1。这是一种非常明智的方法,还是我应该放弃列表框的想法,转而采用较低级别的方法?
2.我必须覆盖节点间链接线-目前不确定如何进行(作为ControlTemplate的一部分的UIElement类?
3.一些人似乎因为画布上的阴囊而头痛——这会成为一个问题吗?
任何最受欢迎的一般或具体建议。

哇,作为一个控件还不错

我也在做类似的事情,但不是那么简单

1) 依我看,DragCanvas是承载+拖动元素的基本方式。由于您必须再次承载标签(节点)、圆弧和标签(圆弧的重量),因此我认为DragCanvas将比您自己编写自定义控件更难

并不是所有的事情都可以通过模板实现:有时候比winforms之类的“旧”方法要好得多,甚至是一种混合方法

2) 如上所述,我将创建一个画布派生的面板,它将承载多个UIElement(标签、圆弧等)。它们都应该由模型+视图模型管理。这在开始时有点困难,但在将来会给你很多满足感和灵活性

3) 我不认为帆布会让你头痛!充满元素的画布的大小始终为零。这给那些试图添加scrollviewer的人带来了“麻烦”

相反,画布派生类(如上)应该重写MeasureOverride方法,以便其大小适合任何托管对象。但是,不能使用负坐标(这会导致滚动问题)这一事实有点令人恼火

很难用几句话来描述一个类似的“编辑”背后的所有工作。任务不容易,问题很多

不管怎样,希望能有所帮助


干杯

哇,作为一个控制,还不错

我也在做类似的事情,但不是那么简单

1) 依我看,DragCanvas是承载+拖动元素的基本方式。由于您必须再次承载标签(节点)、圆弧和标签(圆弧的重量),因此我认为DragCanvas将比您自己编写自定义控件更难

并不是所有的事情都可以通过模板实现:有时候比winforms之类的“旧”方法要好得多,甚至是一种混合方法

2) 如上所述,我将创建一个画布派生的面板,它将承载多个UIElement(标签、圆弧等)。它们都应该由模型+视图模型管理。这在开始时有点困难,但在将来会给你很多满足感和灵活性

3) 我不认为帆布会让你头痛!充满元素的画布的大小始终为零。这给那些试图添加scrollviewer的人带来了“麻烦”

相反,画布派生类(如上)应该重写MeasureOverride方法,以便其大小适合任何托管对象。但是,不能使用负坐标(这会导致滚动问题)这一事实有点令人恼火

很难用几句话来描述一个类似的“编辑”背后的所有工作。任务不容易,问题很多

不管怎样,希望能有所帮助


干杯

你好,马里奥-谢谢你的意见。是的,我同意你对DragCanvas的评论。从您在2)中的评论中,我是否可以理解为您将放弃ListBox基,并直接从画布派生customcontrol?一方面,我认为ListControl或ItemsControl对于选择等非常有用,但另一方面,当您声明时,它们不一定适合元素(弧和弧权重)之间存在交互的模型。问题本身在于ItemsControl映射一组唯一的对象(例如节点),但您应该映射弧,用他们的体重。因为它们不是同一个控件,所以应该将两个或三个ItemsControl混合在一起,我发现使用自定义解决方案很麻烦。我真的很喜欢WPF和它的方法,但有时会有点过分。好吧,我将研究直接从画布派生控件和管理我自己的对象(节点和弧/链接)——我将看看这会是什么样子,也许还会看看其他人是否有任何输入。干杯。嗨,马里奥-谢谢你的投入。是的,我同意你对DragCanvas的评论。从您在2)中的评论中,我是否可以理解为您将放弃ListBox基,并直接从画布派生customcontrol?一方面,我认为ListControl或ItemsControl对于选择等非常有用,但另一方面,当您声明时,它们不一定适合元素(弧和弧权重)之间存在交互的模型。问题本身在于ItemsControl映射一组唯一的对象(例如节点),但您应该映射弧,用他们的体重。因为它们不是同一个控件,所以应该将两个或三个ItemsControl混合在一起,我发现使用自定义解决方案很麻烦。我真的很喜欢WPF和它的方法,但有时会有点过分。好吧,我将研究直接从画布派生控件和管理我自己的对象(节点和弧/链接)——我将看看这会是什么样子,也许还会看看其他人是否有任何输入。干杯