在我的应用程序中,我在画布中有一个多边形(4 个点 = 矩形)。我想通过使用鼠标滚轮将多边形缩放一个因子。为此,我使用以下代码:
double scale = 1.0, factor = 1.01, cX, cY;
void polygon_MouseWheel(object sender, MouseWheelEventArgs e)
{
cX = e.GetPosition(polygon).X;
cY = e.GetPosition(polygon).Y;
if (e.Delta > 0) scale *= factor;
else scale /= factor;
polygon.RenderTransform = new ScaleTransform(scale, scale, cX, cY);
}
这很好用,当我将鼠标指针放在多边形中的点 P(假设 P 是靠近多边形左上角的点)并向上或向下滚动时。所以多边形根据那个点放大或缩小。但是当我将鼠标指针移动到另一个点 Q(靠近右下角)并继续放大或缩小时,多边形会向左上角移动一个量 s。似乎 s 的量取决于 P 和 Q 之间的距离。因此,如果 P 和 Q 之间的距离很大,则偏移量很大。
在这种情况下,期望的行为是多边形没有移动,而只是缩放到新的点 Q。
有谁知道,转变的原因是什么?我很感谢任何提示。
示例代码:
<window ...>
<Grid>
<Canvas Name="canvas1" Background="LightBlue">
<Polygon Points="100,100 100,300 300,300 300,100" Name="polygon" Fill="Black" MouseWheel="polygon_MouseWheel"/>
</Canvas>
</Grid>
</Window>
public MainWindow()
{
InitializeComponent();
}
double scale = 1.0, factor = 1.01, cX, cY;
void polygon_MouseWheel(object sender, MouseWheelEventArgs e)
{
cX = e.GetPosition(polygon).X;
cY = e.GetPosition(polygon).Y;
if (e.Delta > 0) scale *= factor;
else scale /= factor;
polygon.RenderTransform = new ScaleTransform(scale, scale, cX, cY);
}