我正在尝试创建一个WPF程序,用户可以在多边形顶点上拖动装饰器来拉伸和调整形状大小。当鼠标抓住顶点并拖动它时,它将重绘具有该位置顶点的多边形。我知道可以修改宽度/高度字段来重新设置整体形状,但我想要做的只是改变顶点位置,而多边形线基本上重新绘制一个带有新顶点位置的新多边形。
到目前为止,我能够绘制静态大小的多边形(矩形)并在角落上放置装饰,但问题似乎是当您拖动装饰时,装饰框不会停留在多边形顶点上。我相信这是因为相对于多边形(其装饰元素)的位置绘制了装饰,而不是绘制它的整个画布。
我想知道是否有办法简单地将装饰器定位到屏幕坐标而不是相对于形状。我的逻辑是,我可以简单地使用多边形顶点处的onRender()
作为位置绘制一个装饰框,并使用鼠标拖动功能获取鼠标的位置并直接更改多边形的顶点,从而也可以更改坐标所在的位置。画的是装饰者。到目前为止,我还没有找到办法做到这一点。这有可能吗?是否可以在顶点上绘制装饰器,以便在调整形状大小时将其捕捉到它?如果不是,有人知道另一种方法吗?
答案 0 :(得分:0)
在玩了一下后,我找到了解决方案。首先,重要的是你要了解WPF如何实际处理装饰者的渲染。这对我很有帮助,并对其工作原理给出了很好的解释:Why does my adorner not re-render when the element it's applied to changes?
对我来说,主要问题是我需要调用invalidateVisual()来手动调用OnRender()函数来对adorner / polygon顶点位置进行更改。另一件事是确保您的Stretch属性设置为none。我有点设置填充它将抵消点并且不允许它正确渲染。在此之后,确保装饰者OnRender()函数通过将polygon.points属性传递给装饰者的绘制调用来在多边形的顶点上绘制装饰器。