【发布时间】:2014-02-12 11:30:53
【问题描述】:
在我的应用程序中,我在画布中有一个多边形(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);
}
【问题讨论】:
标签: translation center polygon scaletransform