wpf自定义控件(WPF-7.鼠标输入事件)
wpf自定义控件(WPF-7.鼠标输入事件)
2024-11-25 03:26:54  作者:半生轻浮  网址:https://m.xinb2b.cn/tech/glj453774.html

摘要

鼠标输入也是一种常见的WPF事件类型,主要通过鼠标的操作来触发事件。 常见的鼠标事件有MouseEnter和MouseLeave,分别是在鼠标移动到组件上和离开组件时触发的,这两个事件都是直接事件,尽在某个元素上触发,不会传播到别的元素上。 除了这两种比较简单的直接时间,也包括一些冒泡路由事件和隧道路由事件,比如:PreviewMouseMove、MouseMove等

正文

鼠标单击

鼠标单击 鼠标单击分为鼠标左键和鼠标右键的单击,常见的鼠标单击事件会触发以下事件: PreviewMouseLeftButtonDown

PreviewMouseRightButtonDown

MouseLeftButtonDown

MouseRightButtonDown

PreviewMouseLeftButtonUp

PreviewMouseRightButtonUp

MouseLeftButtonUp

MouseRightButtonUp

Preview 一般是隧道

捕获鼠标

如果我们希望只能某个组件独占鼠标,那么我们利用鼠标捕获,让该组件捕获鼠标,从而鼠标点击其他组件时无法进入到响应函数中。

<Window x:Class="_7.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:_7" mc:Ignorable="d" Title="MainWindow" Height="350" Width="600" MouseDown="Window_MouseDown" MouseMove="Window_MouseMove" > <StackPanel> <Button x:Name="btnCapture" Content="捕获" Click="btnCapture_Click" Margin="20"></Button> <Label Name="lblPostion" Margin="20" Background="AntiqueWhite"></Label> <Rectangle Stroke="Aqua" Width="100" Height="100" Margin="20" x:Name="rect"> </Rectangle> </StackPanel></Window>

private void Window_MouseDown(object sender, MouseButtonEventArgs e){ lblPostion.Content = e.GetPosition(rect);}private void Window_MouseMove(object sender, MouseEventArgs e){ lblPostion.Content = e.GetPosition(rect);}private void btnCapture_Click(object sender, RoutedEventArgs e){ Mouse.Capture(this.rect);}

拖拽

鼠标拖放就是将窗口内某个元素拖离原来位置并放置到窗口的其他位置上,一般拖放分为三个步骤:

鼠标单击选择要拖放的元素;鼠标左键按住不放移动元素使其位置发生变化;鼠标松开左键将元素放置在某个位置。 AllowDrop="True"

<Grid> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Label Content="Hello world" Name="lbl1" Grid.Row="0" AllowDrop="True" BorderThickness="1" BorderBrush="Blue" MouseDown="lbl1_MouseDown"></Label> <Label Content="" Name="lbl2" Grid.Row="1" Foreground="Red" BorderThickness="1" BorderBrush="Red" Drop="lbl2_Drop" AllowDrop="True"></Label></Grid>

private void lbl1_MouseDown(object sender, MouseButtonEventArgs e){ Label lbl=(Label)sender; DragDrop.DoDragDrop(lbl,lbl.Content,DragDropEffects.Copy);}private void lbl2_Drop(object sender, DragEventArgs e){ lbl2.Content = e.Data.GetData(DataFormats.Text);}

做一个拖拽的例子

MouseMove

MouseLeftButtonUp

MouseLeftButtonDown

当Down,捕获鼠标

当Up,释放鼠标

当Move,修改Top,Left,

.SetValue(Canvas.LeftProperty, point.X - mouseOffset.X);

.SetValue(Canvas.TopProperty, point.Y - mouseOffset.Y);

<Canvas x:Name="cav"> <Rectangle x:Name="rect1" Fill="LightCoral" Width="100" Height="100"></Rectangle> <Rectangle x:Name="rect2" Fill="LightBlue" Width="100" Height="100" Canvas.Right="0" Canvas.Top="0" ></Rectangle> <Rectangle x:Name="rect3" Fill="LightGray" Width="100" Height="100" Canvas.Right="0" Canvas.Bottom="0"></Rectangle> <Rectangle x:Name="rect4" Fill="LightGreen" Width="100" Height="100" Canvas.Left="0" Canvas.Bottom="0"></Rectangle> <Label Content="AAA" ></Label></Canvas>

写一个简单拖拽类

internal class DragClass{ bool isDrag = false; Point mouseOffset; public Canvas cav { get; set; } public System.Windows.UIElement ui { get; set; } public DragClass(Canvas cav, System.Windows.UIElement ui) { this.cav = cav; this.ui = ui; this.ui.MouseLeftButtonDown = Ui_MouseLeftButtonDown; this.ui.MouseLeftButtonUp = Ui_MouseLeftButtonUp; this.ui.MouseMove = Ui_MouseMove; } private void Ui_MouseMove(object sender, MouseEventArgs e) { if (isDrag) { Point point = e.GetPosition(this.cav); ((System.Windows.UIElement)sender).SetValue(Canvas.TopProperty, point.Y - mouseOffset.Y); ((System.Windows.UIElement)sender).SetValue(Canvas.LeftProperty, point.X - mouseOffset.X); } } private void Ui_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (isDrag) { ((System.Windows.UIElement)sender).ReleaseMouseCapture(); isDrag = false; } } private void Ui_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { isDrag = true; mouseOffset = e.GetPosition((System.Windows.IInputElement)sender); ((System.Windows.UIElement)sender).CaptureMouse(); }}

DragClass drap1 = new DragClass(this.cav, this.rect1);DragClass drap2 = new DragClass(this.cav, this.rect2);DragClass drap3 = new DragClass(this.cav, this.rect3);DragClass drap4 = new DragClass(this.cav, this.rect4);


  • 城阳区中式风格装修设计 中式风格是什么意思
  • 2024-11-25城阳区中式风格装修设计 中式风格是什么意思好多人都喜欢那种复杂的装修风格,感觉那样的装修高端大气上档次,其实不然,过于复杂的装修让室内空间臃肿且凌乱,而且特别浪费钱,打扫也是个难题不如借鉴中国铁建香榭国际这套123平米的装修方案,采用中式风的。
  • 手机有望远镜功能吗怎样使用(很多人都不知道)
  • 2024-11-25很多人都不知道现在还有很多朋友都不知道,手机上有个功能,打开后可以像望远镜一样使用,下面大家来了解一下吧一、如何开启1、先找到手机上的【设置】点击进去,随后在设置页面找到【通用】功能,并点击进入;接着找到【辅助功能。
  • 雪鹰领主第三季什么时间更新(雪鹰领主第3季热血开播)
  • 2024-11-25雪鹰领主第3季热血开播《雪鹰领主》第3季正式开播!今日起每周一10:00锁定腾讯视频!首周更新2集,即今日更新为53、54集(第3季第1集即为第53集)本季共26集,连播半年番看超凡接下来快一起来看第三季的精彩剧情吧!超凡。
  • 北海市整治牛皮癣小广告(做好加法减法和乘法)
  • 2024-11-25做好加法减法和乘法2018-12-1416:58|浙江新闻客户端记者徐灿灿9日,从永康东站出发,记者蹬上一辆环保自行车,顺着城区一路向西,周边的环境似乎和往日有些不一样左顾右盼好一会,才恍然大悟:城区主干道各种小广告乱。
  • 豫剧名旦老艺术家(豫剧北派艺术创始人胡小凤)
  • 2024-11-25豫剧北派艺术创始人胡小凤《穆桂英挂帅》,是豫剧著名大师马金凤的代表曲目,但大家不知道的是,这部戏同时也是另一位豫剧演员的代表曲目,她就是胡小凤而且由胡小凤主演的《穆桂英挂帅》,与马金凤主演的《穆桂英挂帅》都被拍成了舞台艺术片。
  • 咏海棠最好的一首诗苏轼(鬓边不是海棠红火了)
  • 2024-11-25鬓边不是海棠红火了“只要你愿意,我就一直陪着你吧!”《鬓边不是海棠红》越播越渐入佳境,豆瓣评分已经飞涨到了7.4,已经是2020年以来国产剧的最大黑马小海棠不得不吹爆《鬓边》的服道化,堪称”良心”,那质感,那绣花,肉眼。
  • 我的世界熊猫最新版(我的世界熊猫更新啦)
  • 2024-11-25我的世界熊猫更新啦《我的世界》熊猫更新的消息9月底刚确定,这不,基岩版1.8.0.8测试版已经放出了今天小编就带大家去最新的测试版里找到熊猫带你踏上寻找熊猫之路!我的世界:基岩版1.8测试版已更新,熊猫加入!脚手架是这。
  • 夜读真正靠谱的人(夜读靠谱)
  • 2024-11-25夜读靠谱图|清石涛靠谱,是最难得的人品如果有人问我,什么魅力能让人在人际交往中无往不利?那我一定会说,靠谱靠谱,是最难得的人品接触的人和经历的世事多了,就越发觉靠谱的人是人间宝藏和他们相处,身心舒畅,常让人眼。
  • 大亚湾新春灯会 大亚湾区举行2023年春节游园活动
  • 2024-11-25大亚湾新春灯会 大亚湾区举行2023年春节游园活动1月22日,大年初一在春日暖阳下,惠州大亚湾经济技术开发区(下称“大亚湾区”)红树林公园热闹非凡,市民们携家带口前来参加2023年春节游园活动该活动由大亚湾区宣教局主办,现场设置了360度环拍、幸运套。
  • 学习是成长的阶梯进步的桥梁(学习是成长进步的阶梯)
  • 2024-11-25学习是成长进步的阶梯时间过得真快,转眼间已快到秋收的时节,今天正好是秋分,都说落叶知秋,一场秋雨一场寒今天单位职工体检,早晨4点多就出去了,感觉清晨还不是太冷,因为时间太早,街上冷冷清清的看不见几个人影儿,每天起早上班,。
  • 肾病患者能吃的养肾水果(肾病患者不能吃此水果)
  • 2024-11-25肾病患者不能吃此水果杨桃,别名:五敛子,杨桃,洋桃,三廉子等,被子植物门,五敛子属阳桃是一种产于热带亚热带的水果,具有非常高的营养价值阳桃有很高的药用价值,尤其鲜果含糖量非常丰富,成分包括蔗糖、果糖、葡萄糖,还有苹果酸、。
  • 舌头最怕出现这10种变化(舌头吐露的身体秘密)
  • 2024-11-25舌头吐露的身体秘密后台读者发来了“求救”信:您好,想咨询一下关于舌头的问题,最近一阵子早上起来的时候,照镜子,总发现自己的舌头边缘有锯齿状的纹路,一开始我以为是上火了,所以也没太在意但是现在持续了好长时间了,这要紧吗?。