首页 > 其他分享 >鼠标事件

鼠标事件

时间:2024-01-24 11:24:20浏览次数:22  
标签:sender 元素 TextBlock 事件 拖放 鼠标

鼠标键盘如何触发路由事件

自定义的路由事件可以简单的分为两类:

  1. 在依赖属性的PropertyChangedCallback中被调用,当属性值被更改后,发布属性变化路由事件。依赖属性可以响应鼠标键盘被修改,从而发布自定义路由事件。
  2. Mouse.MouseLeftButtonDown附件事件,可以被任何继承自UIElement的元素自动发布,我们可以在宿主类的构造函数中订阅鼠标键盘事件,事件处理程序调用自定义路由事件。

鼠标输入

MouseEnter和MouseLeave

当鼠标进入和离开元素时,发布事件。二者是直接路由事件,这是合理的,根据逻辑树的嵌入规则,进入内层元素前肯定先进入外围元素,所以无需冒泡和隧道,让事件从内部向外传播。

MouseMove和PreviewMouseMove

鼠标在元素上移动时,会发布此事件。

MouseEventArgs

<Button x:Name="btn" Height="50" Width="100" MouseMove="Button_MouseMove"></Button>
private void Button_MouseMove(object sender, MouseEventArgs e)
{
    Point point = e.GetPosition(btn);
    this.Title = point.X.ToString() + point.Y.ToString();
}

MouseEventArgs的成员方法GetPosition(IInputElement relativeTo)能够获取鼠标相对指定元素的坐标,参考原点是元素的左上角。

IsMouseOver和IsMouseDirectlyOver

UIElement有两个依赖属性IsMouseOver和IsMouseDirectlyOver。IsMouseOver检测鼠标是否在元素及其子元素上面,IsMouseDirectlyOver检测鼠标是否在元素上面而非其子元素上面。

这两个属性最常用的地方就是触发器,当鼠标操作元素时用来改变元素的样式和外观。

鼠标单击

MouseLeftButtonDown,PreviewMouseLeftButtonDown,MouseLeftButtonUp,PreviewMouseLeftButtonUp

MouseRightButtonDown,PreviewMouseRightButtonDown,MouseRightButtonUp,PreviewMouseRightButtonUp

这些事件定义在UIElement中,Control类又添加了MouseDoubleClick和PreviewMouseDoubleClick,Button添加了Click。

事件的参数是MouseButtonEventArgs,它继承自MouseEventArgs,它的ClickCount属性可用来判断双击还是单击。

高级元素新增的鼠标事件可能覆盖掉UIElement中的鼠标事件,在使用时尝试一下选择合适的事件就可以了。

鼠标拖拽

鼠标捕获

鼠标拖放

  1. 拖放源在MouseLeftButtonDown事件处理程序中调用DragDrop.DoDragDrop( )选择复制的内容。
  2. 拖放目标的AllowDrop=True,才能接受拖动的内容。
  3. 可以在拖放目标的DragEnter事件处理程序中通过e.GetDataPresent()添加接受或拒绝拖放内容的逻辑。不可接受时,鼠标呈中间带红线的圆形。
  4. 当鼠标在拖放目标松开左键后,拖放目标的Drop事件处理程序接受拖放内容。

拖拽文件显示路径

<Grid>
    <TextBlock Background="Orange" Height="50" Width="270" Drop="TextBlock_Drop" AllowDrop="True"/>
</Grid>
private void TextBlock_Drop(object sender, DragEventArgs e)
{
    (sender as TextBlock).Text = ((System.Array)e.Data.GetData(System.Windows.DataFormats.FileDrop)).GetValue(0).ToString();
}
视图
<StackPanel>
    <TextBlock Background="Orange" Height="50" Width="270" Margin="0,50,0,0" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" Text="待拖拽"/>
    <TextBlock Background="Lime" Height="50" Width="270" Drop="TextBlock_Drop" AllowDrop="True" Margin="0,50,0,0" DragDrop.DragEnter="TextBlock_DragEnter" DragDrop.Drop="TextBlock_Drop"/>
</StackPanel>
private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    DragDrop.DoDragDrop((sender as TextBlock), (sender as TextBlock).Text, DragDropEffects.Copy);
}

private void TextBlock_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.Text))
    {
        e.Effects = DragDropEffects.Copy;
    }
    else
    {
        e.Effects = DragDropEffects.None;
    }
}

private void TextBlock_Drop(object sender, DragEventArgs e)
{
    (sender as TextBlock).Text = e.Data.GetData(DataFormats.Text) as string;
}
视图

标签:sender,元素,TextBlock,事件,拖放,鼠标
From: https://www.cnblogs.com/euvio/p/17984205

相关文章

  • QGraphicsView缩放内容时保持鼠标位置不变
    有时在QGraphicsView显示一张图片时,我们需要缩放图像同时保持鼠标悬停位置内容的位置不变。这时候就需要我们在缩放时实时控制QGraphicsView的水平和垂直滚动条控件的位置。本文给出一个实现此功能的简单例子。此例子在VS2017和Qt5.9的环境下测试通过。软件效果如下:头文件:clas......
  • JavaScript DOM表单相关操作之表单相关事件
    1、焦点事件焦点事件就是鼠标的光标事件,点到输入框中,叫做获得焦点事件,当鼠标离开这个输入框时叫做失去焦点事件。<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>知数SEO_专注搜索引擎优化和品牌推广</title></head><body><form><h3>输......
  • 主机提示IPMI 系统事件日志状态告警
    登陆vCenter连接到一台ESX主机(Dell服务器,很久之前机器的小屏幕上就有告警,内容为日志满了,因为机器不能重启,所以一直没有机会去清除日志)时,得到一条警报:主机IPMI系统事件日志状态,这种警报通常是由于系统事件日志满了导致的,必须清除IPMI系统日志后重置传感器。1.Client登陆vCenter控......
  • 【9.0】信号量和事件
    【一】信号量(了解)信号量Semahpore(同线程一样)【1】引入互斥锁同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去如果指定信号量为3,那么来一个人获得一把锁,计数加1,当......
  • MySQL事件自动kill运行时间超时的SQL
    delimiter$createeventmy_long_running_trx_monitoronscheduleevery1minutestarts'2015-09-1511:00:00'oncompletionpreserveenabledobegindeclarev_sqlvarchar(500);declareno_more_long_running_trxintegerdefault0;declarec_......
  • 别再混淆事件源(Event Sourcing)和消息流(Message Streaming)了!
    0前言Kafka不适合事件溯源,Kafka适合消息流。这两种事物需要不同存储机制。事件溯源(EventSourcing),需DB充当事件日志,为事件溯源存储的事件必须以某种方式编写,以便将来的读取能够快速组装属于单个聚合的较小(更小的)事件流最初发射它们的。这需要随机访问索引消息流(MessageS......
  • 细说JavaScript事件处理(JavaScript事件处理详解)
    js语言的一个特色和就是它的动态性,即一时间驱动的方式对用户输入作出反应而不需要依赖服务器端程序。事件是指人机交互的结果,如鼠标移动、点击按钮、在表单中输入数据或载入新的Web洁面等。一、什么是事件事件是一些可以通过脚本响应的页面动作,当文档、浏览器、元素发生某些有趣......
  • JavaScript DOM表单相关操作之表单相关事件
    1、焦点事件焦点事件就是鼠标的光标事件,点到输入框中,叫做获得焦点事件,当鼠标离开这个输入框时叫做失去焦点事件。​<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>知数SEO_专注搜索引擎优化和品牌推广</title></head><body><form><h3>......
  • 细说JavaScript事件处理(JavaScript事件处理详解)
    js语言的一个特色和就是它的动态性,即一时间驱动的方式对用户输入作出反应而不需要依赖服务器端程序。事件是指人机交互的结果,如鼠标移动、点击按钮、在表单中输入数据或载入新的Web洁面等。一、什么是事件事件是一些可以通过脚本响应的页面动作,当文档、浏览器、元素发生某些有......
  • JavaScript DOM表单相关操作之表单相关事件
    1、焦点事件焦点事件就是鼠标的光标事件,点到输入框中,叫做获得焦点事件,当鼠标离开这个输入框时叫做失去焦点事件。<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>知数SEO_专注搜索引擎优化和品牌推广</title></head><body><form><h3>输......