首页 文章

WPF - 创建要在Canvas上使用的简单控件

提问于
浏览
3

我正在为图像后期处理开发一个简单的WPF UI .

我想创建一个可拖动的WPF控件,用于Canvas,它看起来大致如下:

http://img32.imageshack.us/img32/884/photoeditor.png http://img32.imageshack.us/img32/884/photoeditor.png

两个 endpoints 椭圆都是可拖动的,并且当 endpoints 移动时,连接它们的线将跟随 .

现在,我知道如何通过简单地将这些元素添加到Canvas中然后实现必要的事件处理来实现这一点,以使元素在被拖动时移动 . 但如果我想添加其他类型的可拖动控件,那就很难维护 .

我想要做的是将所有处理隔离到它自己的类(比如DragLine),派生自FrameworkElement或UIElement . 要将这个可拖动的UI元素添加到Canvas中,我将创建一个DragLine实例,并将其添加到Canvas.Children中 . 我的程序的其余部分只会看到DragLine实例,并且不需要担心用于绘制新元素的线条或椭圆 .

我想使用标准形状(如Ellipse)实现线 endpoints ,而不是自己绘制所有UI元素 . 那是因为我想重新使用事件处理和命中测试这些形状已经实现 .

问题:从FrameworkElement派生出正确的方法吗?然后,线和终点椭圆将只是我新类中的视觉和逻辑子项 .

如果不推荐使用FrameworkElement派生,那么您将如何解决这个问题呢?

如果是的话,有没有办法简化它的实现,因为新类只能在Canvas上使用(并且不需要像Grid或StackPanel那样好用)?

1 回答

  • 4

    啊,是的,试图重新发明框架中已经存在的东西,因为你不知道它们 . 很长一段时间它一直是我的爱好 .

    你在这里做的是尝试创建一种特殊类型的adorner . 使用框架中已存在的位相对容易做到这些 . I suggest you start here.

    你可能想看的另一件事是Decorators . 做几乎相同的事情,但我认为它们更具视觉效果 . 使用哪一个取决于您的要求 .

相关问题