我想做一个应用:用户点击并按住鼠标,当他松开鼠标时,绘制Button左上角是点击(事件MouseDown)的坐标,右下角是事件的坐标用户释放鼠标按钮的地方(事件MouseUp)。这是代码MouseDown:
private void MainWindow_MouseDown(object sender, MouseButtonEventArgs e)
{
StartPoint = e.GetPosition(this);
//Свойство StartPoint объявляется сверху таким образом
//private System.Windows.Point StartPoint { get; set; }
}
这是代码MouseUp:
private void MainWindow_MouseUp(object sender, MouseButtonEventArgs e)
{
EndPoint = e.GetPosition(this);
//Свойство EndPoint объявляется сверху таким образом
//private System.Windows.Point EndPoint { get; set; }
Button temp = new Button();
temp.Margin = new Thickness(StartPoint.X, StartPoint.Y, EndPoint.X, EndPoint.Y);
temp.Background = new SolidColorBrush(Colors.Blue);
temp.Content = "Do not click me!";
mainGrid.Children.Add(temp);
}
它不起作用,按钮绘制太大或根本不绘制。我做错了什么,我怎样才能让它发挥作用?
稍微重写你的代码
为了通过绝对坐标定位控件,使用是正确的
Canvas,它是专门为此设计的。所以我会这样写:XAML:
代码隐藏:
来自@tym32167,更严格的版本:
添加了鼠标捕获,以便鼠标释放发生在同一上下文中。还添加了一个卸载 'a 的订阅
Canvas,以防 UI 逻辑在释放鼠标之前卸载它。