首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在WPF上从拖动源拖放到鼠标上绘制一条线?

在WPF上实现从拖动源拖放到鼠标上绘制一条线的方法如下:

  1. 首先,需要在WPF中使用DragDrop事件来处理拖放操作。在拖动源上,注册PreviewMouseLeftButtonDown、PreviewMouseMove和PreviewMouseLeftButtonUp事件,以便捕获鼠标按下、移动和释放的操作。
  2. 在PreviewMouseLeftButtonDown事件中,开始拖动操作。可以使用DragDrop.DoDragDrop方法来启动拖放操作,并传递拖动源的数据作为参数。
  3. 在PreviewMouseMove事件中,检查鼠标左键是否按下,并且拖动操作已经开始。如果是,则获取鼠标的当前位置,并使用VisualTreeHelper.FindElementsInHostCoordinates方法找到鼠标下方的元素。
  4. 如果找到了目标元素,可以在目标元素上绘制一条线。可以使用Line元素来创建线条,并设置其起始点和终止点为拖动源和鼠标当前位置。
  5. 在PreviewMouseLeftButtonUp事件中,结束拖动操作。可以清除绘制的线条,并执行相应的操作,如数据传输或其他处理。

下面是一个示例代码,演示如何在WPF上实现从拖动源拖放到鼠标上绘制一条线:

代码语言:txt
复制
// 在拖动源上注册事件
private void DragSource_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    // 开始拖动操作
    DragDrop.DoDragDrop(DragSource, "拖动的数据", DragDropEffects.Copy);
}

private void DragSource_PreviewMouseMove(object sender, MouseEventArgs e)
{
    // 检查鼠标左键是否按下,并且拖动操作已经开始
    if (e.LeftButton == MouseButtonState.Pressed && DragDrop.PreviewDragOver != null)
    {
        // 获取鼠标当前位置
        Point currentPosition = e.GetPosition(DragSource);

        // 找到鼠标下方的元素
        var hitResults = VisualTreeHelper.FindElementsInHostCoordinates(currentPosition, DragSource);

        // 如果找到了目标元素
        if (hitResults.Count > 0)
        {
            // 创建线条
            Line line = new Line();
            line.Stroke = Brushes.Black;
            line.StrokeThickness = 2;

            // 设置线条的起始点和终止点
            line.X1 = 0;
            line.Y1 = 0;
            line.X2 = currentPosition.X;
            line.Y2 = currentPosition.Y;

            // 将线条添加到目标元素上
            UIElement targetElement = hitResults[0] as UIElement;
            targetElement.Children.Add(line);
        }
    }
}

private void DragSource_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    // 结束拖动操作
    DragDrop.PreviewDragOver = null;

    // 清除绘制的线条
    UIElement targetElement = DragSource.Children[0] as UIElement;
    targetElement.Children.Clear();

    // 执行其他操作
    // ...
}

请注意,以上示例代码仅为演示目的,实际应用中可能需要根据具体需求进行适当修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

不用Visual Studio,5分钟轻松实现一张报表

Line: 线以可视方式绘制边界或突出显示报表中特定的区域。 ReportInfo:ReportInfo 控件允许您快速显示页码、页数和报表日期等信息。...可打开如下的数据视图: ? 配置完数据后,选择DataSource1,右键添加数据集,即通过一条SQL语句,则可获得一个DataTable类似的数据集对象。 ?...考虑到将来系统迁移的最低成本,我们希望可以在Winform、WPF、ASP.NET、HTML5等平台中能够最低成本的复用---一次性精心设计的报表。 ?...您可以添加或删除页眉和页脚,报表头和报表尾,还可以添加 32 级的分组页眉和页脚(在报表单击右键并选择插入,可以插入报表头/报表尾和分组头/分组尾。)。将控件这些区域中,以此来显示报表数据。...依次数据字段,往报表拖动字段,供应商名称、联系人、地址、城市等 ? 对于Line、BarCode和Picture,则需要从左侧的工具栏拖入。 ?

3.3K50

ubuntu快捷键设置大全

修改目录图标:可以把nautilus中看到的图片,直接拖放到目录属性的图标上就可以了。 搜索文件的“搜索文件夹”那个目录下拉选择,也接受nautilus的目录拖放。这样简单多了。...网站链接和图片也直接拖放到桌面或者目录。可以马上 下载。 在工作区切换器。就是显示几个桌面的那个,里面那么小的软件窗口也可以。直接拖到其他桌面。...在gnome终端,不想输入长的,难记的路径,nautilus个对应目录的文件过来,把文件名去掉,就等于输入长串的路径了。...nautilus的右键菜单增加---10楼 totem的列表里面,直接nautilus里面目录过去,目录里面的音乐电影都会自动排到列表的。...代表 "Delete" 一样) 按住Ctrle+滚动鼠标中键,可以改变当前窗口中字体的大小 ctrl+shift +拖动,可以快速建立链接 1、窗口最大化时,直接标题栏,可立刻缩小窗口,如果不松手

1.9K30

无需Visual Studio,5容易的 – 分为报告

Line: 线以可视方式绘制边界或突出显示报表中特定的区域。 ReportInfo:ReportInfo 控件同意您高速显示页码、页数和报表日期等信息。...数据可通过这个路径下载 (下载附件后。解压文件。...考虑到将来系统迁移的最低成本,我们希望能够在Winform、WPF、ASP.NET、HTML5等平台中能够最低成本的复用—一次性精心设计的报表。...报表头和报表尾,还能够加入 32 级的分组页眉和页脚(在报表单击右键并选择插入。能够插入报表头/报表尾和分组头/分组尾。)。将控件这些区域中,以此来显示报表数据。...依次数据字段,往报表拖动字段,供应商名称、联系人、地址、城市等 对于Line、BarCode和Picture,则须要从左側的工具栏拖入。

1.8K00

HTML5绘画与拖放事件

意思是:在画布绘制 100x100 的矩形,左上角开始 (10,10)。 如下图所示,画布的 X 和 Y 坐标用于在画布对绘画进行定位。 ?...绘制线条: 通过指定从何处开始,在何处结束,来绘制一条线: 代码示例: ? 运行结果: ? 绘制圆形: 通过规定尺寸、颜色和位置,来绘制一个圆: 代码示例: ? 运行结果: ?...ondragstart 事件: 当元素被拖动时就会触发ondragstart 事件,然后通过事件可以进行一些设置,或者打印消息。 代码示例: ? 运行结果: ?...ondragover事件: ondragover 事件会在被别的元素触碰到时触发,通过这个事件的事件对象,可以设置在何处放置被拖动的元素。 默认地,无法将元素放置到其他元素中。...结合以上几个知识点,可以实现将img元素,来回拖放到不同的div元素中,代码示例: ? 运行结果: ? ? ?

3K30

H5拖放原生js将图片拖放另外一个元素里

其中最关键的地方在于确定那里发生了拖放事件,有些事件是在被拖动的元素触发的,而有些事件是在放置目标上触发的。...拖动某些元素时,将一次触发下列事件:ondragstart、ondrag、ondragend。 按下鼠标键并开始移动鼠标时,会在被拖放的元素触发dragstart事件。...触发dragstart事件后,随即会触发drag事件,而且在元素被拖动期间会持续发送该事件。 当拖动停止时(无论是把元素放到了有效的放置目标,还是放到了无效的放置目标上),会触发dragend事件。...ondragenter、ondragover、ondragleave、ondrop 只要元素被拖动到放置目标上,就会触发dragenter事件(类似于mouseover事件)。...4:dataTransfer对象(ps:这个属性,是通过监听事件得来的) dataTransfer对象,它是事件对象的一个属性,用于拖动元素向放置目标传递字符串格式的数据。

2K30

WPF 使用 Skia 解析绘制 SVG 图片

本文告诉大家如何在 WPF 里面,使用 Skia 解析绘制 SVG 图片。...本文也适合控制台使用 SkiaSharp 解析绘制 SVG 图片,本文的 WPF 部分只是在 Skia 绘制完成之后,将 Skia 的内容绘制WPF 的 WriteableBitmap 图片,从而在界面显示...然而 2011 开始,就有开发者在 Google 的论坛里问大佬们,是否 Skia 可以自己带上 SVG 的解析,支持传入 SVG 作为图片进行绘制。...既然 Skia 没有这个功能,那也不能要求对 Skia 的封装 SkiaSharp 有这个功能吧, Matthew Leibowitz 大佬的回复 详细请看 https://github.com/mono...参数基本就是约定了像素数据的表示和透明度支持 拿到 SKBitmap 对象,再根据 WPF 使用 Skia 绘制 WriteableBitmap 图片 提供的方法进行绘制 var writeableBitmap

1.7K30

WPF 通过 EXIF 设置和读取图片的旋转信息

本文将告诉大家如何在 WPF 里面设置图片的 EXIF 信息,包括如何设置图片的旋转信息,以及如何读取 EXIF 的内容 值得一提的是在 WPF 里面,默认的图片渲染信息是无视 System.Photo.Orientation...信息的,一切都是推荐进行手动控制 在开始之前,咱先来用代码创建一张简单的图片 在 WPF 里面,使用代码进行绘图是一个非常高性能的方法,可以重复使用 DirectX 提供的高性能绘制能力,再加上 WPF...而且 WPF 的上层 API 是统一的,屏蔽掉很多细节,不需要更多额外的知识即可使用 先创建一个 DrawingVisual 对象,在这里面传入想要绘制的内容,接着使用 RenderTargetBitmap...,作为画布大小 以上代码准确来说,是没有进行任何实际的绘制逻辑,只是告诉 WPF 框架,应该如何进行绘制。...如果 gitee 不能访问,请替换为 github 的

75210

dotnet 入门到放弃的 500 篇文章合集

使用 Direct2D1 画图 绘制基本图形 WPF 使用 Direct2D1 画图 wpf 使用 Dispatcher.Invoke 冻结窗口 WPF 使用 SharpDX 在 D3DImage 显示...wpf 如何使用 Magick.NET 播放 gif 图片 WPF何在 WriteableBitmap 写文字 WPF何在应用程序调试启动 WPF何在绑定失败异常 WPF 如何画出1像素的线...WPF 弹出 popup 里面的 TextBox 无法输入汉字 WPF 拖动时出现 Invalid FORMATETC structure WPF 拖动滚动 wpf 拦截异常 让多线程异常不会让程序闪退...DataGridTextColumn wpf 绑定 TextLength WPF 编译为 AnyCPU 和 x86 有什么区别 WPF 获得触摸精度和触摸点 WPF 获得触笔悬停元素 WPF 解决...资源冻结 WPF 高性能笔 WPF 鼠标移动到列表 显示列表图标 wpf-DoEvents WPF绑定密码 xamarin_forms_jin_du_tiao_kong_jian xaml 添加 region

10.4K20

Qt官方示例-拖动图标

拖动图标示例显示了如何在同一应用程序中的小部件之间以及不同应用程序之间拖放图像数据。   在使用拖放的许多情况下,用户开始特定的窗口小部件拖放,并将有效负载拖放到另一个窗口小部件。...在此示例中,我们将QLabel子类化以创建用作拖动的标签,并将其放置在同时充当容器和放置站点的QWidget中。   另外,当发生拖放操作时,我们希望发送的不仅仅是图像。...我们还希望发送有关用户在图像中单击位置的信息,以便用户可以将其精确放置在放置目标上。这种详细程度意味着我们必须为数据创建自定义MIME类型。...DragWidget类的实现   DragWidget构造函数在小部件设置一个属性,以确保被关闭时将其删除: DragWidget::DragWidget(QWidget *parent) :...houseIcon->move(10, 80); houseIcon->show(); houseIcon->setAttribute(Qt::WA_DeleteOnClose); }   要启用图标中拖动

1.5K31

WPF 通过 DrawingContext DrawImage 绘制图片

本文告诉大家如何通过 DrawingContext 绘制图片,同时指定绘制图片在画布的某个区域和绘制出来的图片大小,如何裁剪图片 在 WPF 中可以使用 DrawingVisual 进行底层的绘制,底层的绘制的效率是比较高的...,但是因为 WPF 的界面需要的是 UIElement 如果想要添加 DrawingVisual 还需要写一个帮助类 public class Element : UIElement {...加入到界面 然后在构造函数添加一张图片,这时需要拖动一张图片进入解决方案...Element.ContainerVisual.Children.Add(drawingVisual); } 现在可以看到图片在 100,100 的坐标画出,此时图片为被缩放到...50x50 也就是缩放画图片到指定的 Rect 裁剪图片 如果只是需要画出被裁剪的图片,可以使用 CroppedBitmap 进行裁剪 在 CroppedBitmap 的构造可以传入需要裁剪的图片和如何裁剪

94620

WPF 通过 DrawingContext DrawImage 绘制图片 裁剪图片

本文告诉大家如何通过 DrawingContext 绘制图片,同时指定绘制图片在画布的某个区域和绘制出来的图片大小,如何裁剪图片 在 WPF 中可以使用 DrawingVisual 进行底层的绘制,底层的绘制的效率是比较高的...加入到界面 然后在构造函数添加一张图片,这时需要拖动一张图片进入解决方案...Element.ContainerVisual.Children.Add(drawingVisual); } 现在可以看到图片在 100,100 的坐标画出,此时图片为被缩放到...50x50 也就是缩放画图片到指定的 Rect 裁剪图片 如果只是需要画出被裁剪的图片,可以使用 CroppedBitmap 进行裁剪 在 CroppedBitmap 的构造可以传入需要裁剪的图片和如何裁剪...,裁剪是进行矩形的裁剪 如下面代码是裁剪矩形图片的左上角 50x50 范围 var croppedBitmap = new CroppedBitmap(bitmapImage

2.8K20

12.HTML5下一代的HTML标准介绍与初识尝试

0x00 前言简述 描述: 实际在前面学习HTML系列入门课程时,都已经涉猎到HTML5领域(标签元素),本章开始算是作为HTML5的一个复习总结与新增知识点学习,一是为了加深各位学习者的学习印象...3.画布:HTML5的标签可以在网页绘制图形、动画和游戏,提供了更强大的绘图功能。...ondragend : 在拖动操作末端运行的脚本。 ondragover : 当元素在有效拖放目标上正在被拖动时运行的脚本。 ondragenter : 当元素已被拖动到有效拖放区域时运行的脚本。...在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据,dataTransfer.setData() 方法设置被数据的数据类型和值: function...放到何处 -> ondragover事件规定在何处放置被拖动的数据。 默认地,无法将数据/元素放置到其他元素中,如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

28020

基于h5+ angularjs页面拖拽实现

和 setData() 然后,规定当元素被拖动时,会发生什么。...放到何处 - ondragover ondragover 事件规定在何处放置被拖动的数据。 默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。...被数据是被元素的 id ("drag1") 把被元素追加到放置元素(目标元素)中 以上内容来源于W3school 2.整合angular 有时候不得不说前端的一些框架真的方便。...比如我想要绘制如下的图片: ?...我是个动图 不足 应该发布到npm,然后留下一个绑定初始化图片数组的口子。这样大家npm荡下来,只需绑定自己的初始化图片数据就可以实现功能。顶多再改改样式。

1.5K20

MAUI 自定义绘图入门

Microsoft.Maui.Graphics 在它开源项目里面描述的一样,使用 Microsoft.Maui.Graphics 不会被局限于 MAUI 框架上,可以在任何的应用框架下使用上 Microsoft.Maui.Graphics...换句话说,我可以在 WPF 或 WinForms 或者是纯控制台里面使用 Microsoft.Maui.Graphics 进行绘图 另外,我也可以自己注入 Microsoft.Maui.Graphics...的实现定义,扩展其他渲染引擎或框架作为绘图的基础支持 回到主题,本文将告诉大家如何在 MAUI 里面使用 Microsoft.Maui.Graphics 提供的绘图能力进自绘。..."100" HeightRequest="100" Drawable="{StaticResource GraphicsDrawable}"> 运行程序,即可看到界面画出一条线...如果 gitee 不能访问,请替换为 github 的 git remote remove origin git remote add origin https://github.com/lindexi

1K20

WPF 通过 WindowsAppSDK 使用 WinRT 的手写识别功能

本文告诉大家如何在基于 .NET 6 的 WPF 使用 WinRT 的手写识别功能 在开始之前需要先创建 WPF 项目,创建完成之后,可替换 csproj 项目文件为以下代码,用来安装初始化环境 <Project...安装 WindowsAppSDK 库构建失败 NETSDK1082 和 NETSDK1112 找不到 win10-arm 失败 另外,还需要你的 VisualStudio 2022 安装对应的负载,...10.0.19041 负载等,基本 Visual Studio 告诉你缺哪个就安装哪个 先在 MainWindow.xaml 放入一个 InkCanvas 元素,用来绘制笔迹和创建笔迹对象,代码如下...gitee.com/lindexi/lindexi_gd.git git pull origin 55aa84a041b5f9e3446a646662fc079695783e81 以上使用的是 gitee 的,...如果 gitee 不能访问,请替换为 github 的

56410

WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法

本文来告诉大家如何在 WPF 应用 HOST 了 UWP 的 InkCanvas 控件时,给 InkCanvas 控件设置背景色,加上按钮等业务功能的实现方法 在上一篇博客有告诉大家如何在 WPF 里面使用上...自定义控件编写的项目,咱将在 UWP 的控件项目里面完成所有的自定义逻辑 如何创建项目和如何组织,还请参阅 官方文档 本文这里就不多说了 回到如何给 UWP 的 InkCanvas 控件添加背景色的方法,...在新建的 UWP 控件项目里面,添加一个自定义的控件, CustomInkControl.xaml 控件 在这个控件里面的 XAML 添加如下代码 <UserControl x:Class="...InkCanvas x:Name="InkCanvas" Loaded="InkCanvas_OnLoaded"> 为了能在鼠标下进行绘制...如果 gitee 不能访问,请替换为 github 的 git remote remove origin git remote add origin https://github.com/lindexi

2.2K20

excel常用操作大全

上下拖动时,鼠标会在格,单元的边界处变成一个水平的“工”字符号,左右拖动时,鼠标会变成一个垂直的“工”字符号。在释放鼠标按钮完成操作后,一个或多个选定的格单位将被拖放到一个新的位置。...14.如何在屏幕扩大工作空间? “视图”菜单中,选择“全屏”命令。 15.如何使用快捷菜单?弹出菜单包括一些最常用的命令,可以大大提高操作效率。...选择具有所需格式的单元格,单击工具栏的“格式画笔”按钮,鼠标变成画笔形状,然后单击要格式化的单元格以复制格式。 19.如何在表单中添加斜线?...将它移动到您想要添加斜线,的开始位置,按住鼠标左键并将其拖动到结束位置,释放鼠标,将绘制斜线。此外,您可以使用“文本框”按钮轻松地在斜线的顶部和底部添加文本,但是文本周围有边框。...21、用鼠标右键拖动单元格填充手柄 在前一节中,介绍了用鼠标左键拖动单元格填充手柄自动填充数据序列的方法。事实,用鼠标右键拖动单元格填充手柄更灵活。

19.1K10

drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践

拖放事件事件详情一个元素被拖放,他可能会经过很多个元素,最终到达想要放置的元素内。这里,我暂时把被拖放的元素称为对象,被经过的元素称为过程对象,到达的元素称为目标对象。...,被拖拽对象离开目标对象时触发拖动事件列表每一个可拖动的元素,在拖动过程中,都会经历三个过程,拖动开始-->拖动过程中--> 拖动结束在拖动标上触发事件 (元素-被拖动的元素):ondragstart...dragover -> dragleave -> drop ->dragend目标对象事件:drop:对象拖放到目标对象中,目标对象完全接受被拖拽对象时触发,可理解为在目标对象内松手时触发。...拖动目标(dragstart事件触发的元素)生成半透明图像,并在拖动过程中跟随鼠标指针。这个图片是自动创建的,你不需要自己去创建它。...此功能可用于将文件用户桌面拖动到浏览器。一般配合FileReader来处理文件。

6.2K21
领券