wpf自定义控件(WPF-7.鼠标输入事件)
wpf自定义控件(WPF-7.鼠标输入事件)
2024-06-28 07:11:35  作者:半生轻浮  网址:https://m.xinb2b.cn/life/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);

wpf自定义控件(WPF-7.鼠标输入事件)(1)

  • 游客泰山受伤消防抬下山(游客在泰山十八盘台阶摔伤)
  • 2024-06-28游客在泰山十八盘台阶摔伤11月30日15时46分,泰安市消防支队接到报警,称在泰山景区十八盘方台子附近,一名游客摔伤,无法活动,泰山中队迅速赶往现场实施救援消防员到场后,发现一名游客因大雪天气,在十八盘台阶湿滑处摔伤,致使腿。
  • 黑芝麻栗子怎么做好吃(核桃栗子不如黑粉)
  • 2024-06-28核桃栗子不如黑粉入冬后,吃核桃栗子不如吃它,多买点囤起来,每天吃一点,特省事!秋收冬藏,秋冬季节五谷丰登,谷物和坚果也喜获丰收,它们恰恰就是我们要寻找的:板栗、核桃、杏仁、黑米、黑豆……作为大自然的馈赠,这些应季食材。
  • 如果得了阑尾炎肚子疼有哪些症状(肚子痛会是阑尾炎吗)
  • 2024-06-28肚子痛会是阑尾炎吗现代的人们由于饮食不规律以及经常食用刺激辛辣的食物,因此导致了阑尾炎的发生率呈现上升的趋势而阑尾炎虽然不是一种致命的疾病,可是发作的时候也是会产生剧烈疼痛的情况如果不及时处理,还有可能会导致炎症转移或。
  • 可以把两个pdf文件合并吗(怎么把几个PDF文件合并成一个文件)
  • 2024-06-28怎么把几个PDF文件合并成一个文件我们怎么把几个PDF文件合并成一个文件呢?当我们在办公过程中,遇到几个零散的PDF文件,我们想要把它们合并成一个文件来方便统一整理,应该怎么做呢?类似于这样的办公问题我们并不少见,今天给大家解决这一问。
  • 景甜现在在拍哪部戏(和她背后的神秘大佬们)
  • 2024-06-28和她背后的神秘大佬们最近,孙俪的新剧《理想之城》渐渐进入了高潮,收视率也节节攀升,不光观众准时守候播出,连景甜也熬夜刷剧,还差点为此延误了航班为此娘娘特意回复景甜“赶紧补觉”,而景甜则坚持要追完剧再补觉这样的景甜像极了熬。
  • 为什么赊账生意有人做 农村有种生意人
  • 2024-06-28为什么赊账生意有人做 农村有种生意人今天是正月初七,当地农资店的生意也开始忙碌起来了,还没有外出打工的农村人,都忙碌着去镇上购买肥料,把家里种植的药材追好肥料,为年迈的父母减轻些劳动压力,自己也好放心的外出打工挣钱对于各乡镇基层农资店来。
  • windows10怎样备份系统还原系统(就算系统重装也不怕)
  • 2024-06-28就算系统重装也不怕假设你将自己的常用应用程序图标固定到了Windows10任务栏,如果意外删除了其中一个,一般大家只会手动重新固定下即可如果你要重装Windows10或将整个系统重置,是完全可以通过手动备份注册表和应用。
  • 郑恺新拍的电影什么时候出(郑恺首部热血运动电影定档)
  • 2024-06-28郑恺首部热血运动电影定档对于郑恺的影视作品,相信观众们都有看过不少了吧!其中电影《八佰》以及《前任》等系列电影就受到了不少观众们的好评郑恺作为一位班科演员出道的艺人,如今已经在演艺圈中摸爬滚打14年时间,因此对于郑恺的演技来。
  • 盆栽斑点玻璃海棠(阳台盆栽新宠)
  • 2024-06-28阳台盆栽新宠导读年关将至,不少花友已经开始挑选年宵花了,秋冬季节对花卉的需求旺盛,现在的花卉市场也是日益热闹你的阳台还有位置吗?今天来带大家认识一种优秀的新型盆栽花卉,颜值高、花期长,养护也不难,希望你喜欢黄金梅。
  • 大柜机空调耗电多少(最费电的五种家电)
  • 2024-06-28最费电的五种家电生活中,相信每个家庭都离不开家用电器家电虽然用着方便,但它也是建立在耗电的基础上说白了,就是日常只要使用就要支付电费实话实说,现如今的电费也不便宜,所以对于普通老百姓来说,每个月要缴纳的电费也是一笔不。
  • 四川文学投稿400元(四川文学2022年第3期目录)
  • 2024-06-28四川文学2022年第3期目录名家看台南方(短篇小说)/胡学文中篇小说星书店/鬼金塑像/钟正林对话名家金克木年谱或一代知识分子的心路历程——黄德海长篇非虚构文学《读书·读人·读物》/王春林短篇小说远山深处/付桂秋分叉的夜晚/衣水我。
  • 心目中的天安门是什么样的(你没有见过的天安门是什么样子的)
  • 2024-06-28你没有见过的天安门是什么样子的这张照片拍摄于1901年,结束逃亡生涯的慈禧再一次回到皇宫中这次逃亡经历,山西商人得到近距离接触政治核心的机会,成为最大的赢家之一他们为慈禧提供了大量金钱方面的支持与逃离时候的仓皇相比,再次回来要场面。