C# WPF:如何创建可编辑路径

C# WPF:如何创建可编辑路径,c#,wpf,path,canvas,C#,Wpf,Path,Canvas,我想知道是否有人能在这个问题上指导我: 我需要通过单击画布上的几个点来创建路径,这些点将被添加到路径几何体中。完成路径后,用户可以滑动或移动路径的控制顶点以调整路径的形状 我已经知道了如何绘制套索式路径,但如何允许用户选择并移动路径中的单个点???您必须开发一个数据结构来存储点数据,以便轻松查询和操作。PATH对象本身可能是足够的,但是考虑将其封装在另一个对象中以呈现更特定于域的接口。 您必须在画布中检测鼠标事件,并对路径中的所有顶点进行点击测试 点击测试是一个函数,它为您提供对路径中最接近鼠标

我想知道是否有人能在这个问题上指导我:

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


我已经知道了如何绘制套索式路径,但如何允许用户选择并移动路径中的单个点???

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

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

点击测试是一个函数,它为您提供对路径中最接近鼠标坐标的单个点的引用,如果点击距离任何点太远而不能被视为点击,则为null。点击测试函数变成了一个低级构造,从中可以构建更有趣的编辑操作


例如,可以为路径中的每个点存储一个布尔值,指示是否选择该点。当您在按住按钮的同时拖动鼠标时,可以通过在前面提到的数据结构中偏移所有选定点的数据来拖动这些点。

我将尝试以下操作:

在C语言中,有一个ObservableCollection,或者一个PointCollection。 通过数据绑定,我将从该集合中绘制一条路径,并以某种方式从集合中获取其几何图形; 在路径层本身的上方,我将添加某种类型的ItemsContainer,将ItemsTemplate设置为System.Windows.Controls.Primitives.Thumb控件,用于处理拖动,并使用椭圆形状的ControlTemplate和DataTrigger根据是否被选中来更改其外观。ItemsSource也将绑定到集合。 执行此操作时,您将点击test路径以突出显示其点,这将切换ItemsContainer的可见性,从而点击testing

有了这些,您可以使用常规事件,如Drag、MouseMove等,直接处理命中测试