C# 运行时在窗体上拖动控件
我刚刚开始使用WPF。但是我正在尝试添加代码(来自Winforms),使用户可以在运行时拖动任意控件。但我似乎无法得到鼠标的当前位置。。。嗯??没有鼠标的位置?:(我认为在WPF中获取此信息的方法是使用一些附加的事件。您可以进入PreviewMouseDown、PreviewMouseMove和PreviewMouseUp的事件处理程序,在鼠标位于某些控件上并且用户按下/释放鼠标按钮、移动鼠标等时获取有关鼠标的信息C# 运行时在窗体上拖动控件,c#,wpf,windows,controls,drag-and-drop,C#,Wpf,Windows,Controls,Drag And Drop,我刚刚开始使用WPF。但是我正在尝试添加代码(来自Winforms),使用户可以在运行时拖动任意控件。但我似乎无法得到鼠标的当前位置。。。嗯??没有鼠标的位置?:(我认为在WPF中获取此信息的方法是使用一些附加的事件。您可以进入PreviewMouseDown、PreviewMouseMove和PreviewMouseUp的事件处理程序,在鼠标位于某些控件上并且用户按下/释放鼠标按钮、移动鼠标等时获取有关鼠标的信息 这里有一个很好的实例:在鼠标事件中,您可以使用e.GetPosition获取当前
这里有一个很好的实例:在鼠标事件中,您可以使用e.GetPosition获取当前鼠标位置。此函数可以提供相对于特定元素的鼠标位置,也可以传递null 这是一个非常简单的例子,没有点击测试或其他任何东西,只是一个你可以拖动的按钮。我使用了一个画布来保持它的简短,但是你可能会更好地使用转换并将控件转换到所需的位置
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas PreviewMouseLeftButtonDown="Canvas_PreviewMouseLeftButtonDown"
PreviewMouseMove="Canvas_PreviewMouseMove"
PreviewMouseLeftButtonUp="Canvas_PreviewMouseLeftButtonUp">
<Button Name="dragButton" Width="80" Height="21" Canvas.Left="50" Canvas.Top="10">Drag Me!</Button>
</Canvas>
</Window>
我不知道为什么它不正确,但它对我有用
private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moving = true;
}
private void Button_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
moving = false;
}
private void Button_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (moving)
{
Canvas.SetTop(this, e.GetPosition(Parent as Canvas).Y);
Canvas.SetLeft(this, e.GetPosition(Parent as Canvas).X);
}
}
private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moving = true;
}
private void Button_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
moving = false;
}
private void Button_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (moving)
{
Canvas.SetTop(this, e.GetPosition(Parent as Canvas).Y);
Canvas.SetLeft(this, e.GetPosition(Parent as Canvas).X);
}
}