在我的應用程序中,我在畫布中有一個多邊形(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(假設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);
}