wpf 将UI元素位置设置为鼠标位置

rkttyhzu  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(196)

我写了一个小程序,应该显示一个椭圆在确切的鼠标位置。问题是,我现在这样做的方式,鼠标和椭圆的位置只在屏幕的中心精确。如果我把鼠标移到离窗口边框更远的地方,它们就会漂得越来越远。
我使用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);

    // Add the Ellipse to the Grid
    Main_Grid.Children.Add(MousePos_Ellipse);
}
vzgqcmou

vzgqcmou1#

我建议使用Canvas而不是网格。
使用画布,您可以简单地设置椭圆的位置,如下所示:

Canvas.SetLeft(MousePos_Ellipse, MousePos_Point.X);
   Canvas.SetTop(MousePos_Ellipse, MousePos_Point.Y);

Grid控件将自动定位和调整子元素的大小,因此不太适合您的目标。

rjzwgtxy

rjzwgtxy2#

免责声明;虽然上面的答案将解决您的问题,但实际问题没有得到妥善解决。你所面临的问题来自于你对问题的解释,而不是计算机如何看待它。
光标相对于网格的位置与相对于屏幕的位置不同(即即不同的分辨率返回不同的值)。这就是为什么我们的x和y值会越偏离中心越远。你可以通过定义你想要的X和Y位置相对于形式,f来解决这个问题。例如,像这样:

var relativePoint = this.PointToClient(Cursor.Position);

这里值得注意的区别是,我们指向客户端,因此获得了光标在表单中的相对位置。

相关问题