В моем приложении у меня есть многоугольник (с 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);
}
Это прекрасно работает, когда я поместить MousePointer в точку Р (скажем, 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);
}