Dragging Controls on Form at runtime(运行时在窗体上拖动控件)
问题描述
我刚刚开始使用 WPF.但我正在尝试添加我的代码(来自 Winforms),使用户能够在运行时将任何控件拖动到他们希望的任何位置.但我似乎无法获得鼠标的当前位置......嗯?鼠标没有位置?:(
I've just started using WPF. But I'm trying to add my code that (from Winforms) enables the user to drag any control whereever they wish at runtime. But I can't seem to get the current Location of the mouse... Eh? There is no Location for Mouse? :(
推荐答案
在鼠标事件中可以使用 e.GetPosition 获取当前鼠标位置.此函数可以提供相对于特定元素的鼠标位置,或者您可以只传递 null.
In the Mouse event you can use e.GetPosition to get the current mouse position. This function can provide the mouse position relative to a specific element or you can just pass null.
这是一个非常简单的例子,没有命中测试或任何东西,只是一个可以拖动的按钮.我使用了一个画布来保持它的简短,但您可能会更好地使用转换并将控件转换到所需的位置.
Here is a very simple example, no hit testing or anything, just a button that you can drag around. And I used a canvas to keep it short, but you would probably do better to use a transform and translate the control to the desired position.
<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>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private Point _startPoint;
private bool _dragging = false;
private void Canvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (dragButton.CaptureMouse())
{
_startPoint = e.GetPosition(null);
_dragging = true;
}
}
private void Canvas_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (_dragging)
{
Point newPoint = e.GetPosition(null);
double dx = newPoint.X - _startPoint.X;
double dy = newPoint.Y - _startPoint.Y;
Canvas.SetLeft(dragButton, Canvas.GetLeft(dragButton) + dx);
Canvas.SetTop(dragButton, Canvas.GetTop(dragButton) + dy);
_startPoint = newPoint;
}
}
private void Canvas_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (_dragging)
{
_dragging = false;
dragButton.ReleaseMouseCapture();
}
}
}
}
这篇关于运行时在窗体上拖动控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:运行时在窗体上拖动控件


基础教程推荐
- 全局 ASAX - 获取服务器名称 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01