3

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

我想创建一个可拖动的 WPF 控件以在 Canvas 上使用,大致如下所示:

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

两个端点椭圆都是可拖动的,连接它们的线会随着端点的移动而跟随。

现在,我知道如何实现这一点,只需将这些元素添加到 Canvas 中,然后实现必要的事件处理以使元素在拖动时移动。但是,如果我想添加其他类型的可拖动控件,这很难维护。

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

我想使用标准形状(例如椭圆)来实现线端点,而不是自己绘制所有 UI 元素。那是因为我想重用事件处理并命中测试这些已经实现的形状。

问题:从 FrameworkElement 派生是解决这个问题的正确方法吗?然后,直线和端点椭圆将只是我的新班级的视觉和逻辑子级。

如果从 FrameworkElement 派生不是推荐的方式,那么您将如何处理呢?

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

4

1 回答 1

4

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

您在这里所做的是尝试创建一种特殊类型的adorner。使用框架中已经存在的位,这些操作相对容易。 我建议你从这里开始。

您可能想要查看的另一件事是Decorators。做几乎相同的事情,但我认为它们更直观。使用哪一种取决于您的要求。

于 2009-09-08T14:53:52.323 回答