我写了一个小程序,应该在确切的鼠标位置显示一个椭圆。问题是,我现在正在做的方式,鼠标和椭圆位置只是在屏幕的中心。如果我把鼠标放到更远的地方,他们会越走越远。
我使用MouseOver元素更新鼠标位置。
这是我的代码:
private void Window_MouseMove(object sender, MouseEventArgs e)
{
Main_Grid.Children.Clear();
MousePos_Ellipse = new Ellipse();
Point MousePos_Point = new Point();
MousePos_Point = Mouse.GetPosition(Main_Grid);
Main_Grid.Children.Remove(MousePos_Ellipse);
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(55, 255, 255, 0);
MousePos_Ellipse.Fill = mySolidColorBrush;
MousePos_Ellipse.StrokeThickness = 2;
MousePos_Ellipse.Stroke = Brushes.Black;
// Set the width and height of the Ellipse.
MousePos_Ellipse.Width = 15;
MousePos_Ellipse.Height = 15;
// At this Point I do my Positioning
MousePos_Ellipse.Margin = new Thickness(left: MousePos_Point.X - ( Main_Grid.ActualWidth / 2) , top: MousePos_Point.Y - ( Main_Grid.ActualHeight / 2 ), right: 0 , bottom: 0);
//base.AddVisualChild(_circle);
// Add the Ellipse to the Grid
Main_Grid.Children.Add(MousePos_Ellipse);
}
答案 0 :(得分:3)
我建议使用Canvas而不是网格。
使用画布,您可以简单地设置椭圆位置:
Canvas.SetLeft(MousePos_Ellipse, MousePos_Point.X);
Canvas.SetTop(MousePos_Ellipse, MousePos_Point.Y);
Grid控件将自动定位和调整子元素的大小,因此不太适合您的目标。
答案 1 :(得分:1)
声明;虽然上面的答案将解决您的问题,但实际问题未得到妥善解决。您遇到的问题源于您对该问题的解释与计算机的看法相比。
光标相对于网格的位置与相对于屏幕的位置不同(即不同的分辨率返回不同的值)。这就是为什么我们的x和y值会越远离你的中心越远。你可以通过定义你希望你的X和Y位置相对于表格,f.ex来解决这个问题,如下所示:
var relativePoint = this.PointToClient(Cursor.Position);
这里的显着区别在于,我们指向客户端,因此获取Cursor在表单中的相对位置。