0

我正在尝试创建一个 WPF 程序,用户可以在其中拖动多边形顶点上的装饰器以拉伸和调整形状的大小。当鼠标抓住并拖动顶点时,它将重新绘制具有该位置的顶点的多边形。我知道可以修改宽度/高度字段以调整整体形状,但我想要做的只是改变顶点位置,并且多边形线基本上用新的顶点位置重绘一个新的多边形。

到目前为止,我有能力绘制静态大小的多边形(矩形)并在角落放置装饰器,但问题似乎是当你拖动装饰器时,装饰器框不会停留在多边形顶点上。我相信这是因为装饰器是相对于多边形(其装饰元素)的位置绘制的,而不是它所绘制的整个画布。

我想知道是否有一种方法可以简单地将装饰器定位到屏幕坐标而不是相对于形状。我的逻辑是,我可以简单地使用多边形的顶点作为位置绘制一个装饰框onRender(),并让鼠标拖动功能获取鼠标的位置并直接更改多边形的顶点,从而也改变绘制装饰器的坐标。到目前为止,我还没有找到一种方法来做到这一点。这甚至可能吗?是否可以始终在顶点上绘制装饰器,以便在调整形状大小时与顶点对齐?如果没有,有人知道另一种方法吗?

4

1 回答 1

0

在玩了一下之后,我找到了解决方案。首先,重要的是您要更多地了解 WPF 如何实际处理装饰器的渲染。这真的帮助了我,并很好地解释了它是如何工作的:为什么我的装饰器在应用到它的元素发生变化时不重新渲染?

对我来说,主要问题是我需要调用 invalidateVisual() 来手动调用 OnRender() 函数来更改装饰器/多边形顶点位置。另一件事是确保您的 Stretch 属性设置为无。我最初将它设置为填充,它会偏移点并且不允许它正确渲染。之后,通过将 polygon.points 属性传递给装饰器的绘制调用,确保装饰器的 OnRender() 函数在多边形的顶点上绘制装饰器。

于 2012-09-19T14:08:40.747 回答