WPF:如何制作可编辑的路径

时间:2011-03-10 00:59:10

标签: c# wpf path canvas

我想知道是否有人可以指导我解决这个问题:

我需要通过单击画布上的几个点来创建路径,这些点将添加到路径几何体中。完成路径后,用户可以“滑动”或移动路径的控制顶点(锚点)来调整路径的形状。

我已经想出如何绘制“套索”样式路径,但是如何让用户选择并移动路径中的单个点?

2 个答案:

答案 0 :(得分:1)

您必须开发一个数据结构来存储点数据,以便可以轻松查询和操作它。 Path对象本身可能就足够了,但考虑将其包装在另一个对象中以呈现更具域特定的接口。

您必须在“画布”中检测鼠标事件,并对“路径”中的所有顶点进行测试。

命中测试是一种函数,可以为您提供最接近鼠标坐标的路径中的单个点或null如果点击距离任何点都太远而无法被视为“击中”。您的命中测试函数将成为一个低级构造,您可以从中构建更有趣的编辑操作。

例如,您可以为路径中的每个点存储bool,指示是否选择了该点。使用按钮向下拖动鼠标时,可以通过在前面提到的数据结构中偏移它们的数据来拖动所有选定的点。

答案 1 :(得分:0)

我会尝试以下方法:

  1. 在C#中,有一个ObservableCollection<Point>,或者PointCollection
  2. 从那个集合中,通过数据绑定,我会绘制一个Path并以某种方式从集合中获取它的几何;
  3. 在路径图层本身上方,我会添加某种ItemsContainer,将ItemsTemplate设置为System.Windows.Controls.Primitives.Thumb(处理拖动的控件),其中ControlTemplate的形状为Ellipse,DataTrigger根据其改变其外观被选中与否。 ItemsSource也将绑定到该集合。
  4. 这样做,您将对路径进行测试,例如,突出显示其点,这将切换ItemsContainer的可见性(以及因此命中测试)。

    通过这些,您可以使用常规事件,例如&#34; Drag&#34;,&#34; MouseMove&#34;等,直接处理命中测试。