摘要
鼠標輸入也是一種常見的WPF事件類型,主要通過鼠標的操作來觸發事件。 常見的鼠標事件有MouseEnter和MouseLeave,分別是在鼠標移動到組件上和離開組件時觸發的,這兩個事件都是直接事件,盡在某個元素上觸發,不會傳播到別的元素上。 除了這兩種比較簡單的直接時間,也包括一些冒泡路由事件和隧道路由事件,比如:PreviewMouseMove、MouseMove等
正文
鼠標單擊
鼠標單擊 鼠標單擊分為鼠標左鍵和鼠標右鍵的單擊,常見的鼠標單擊事件會觸發以下事件: PreviewMouseLeftButtonDown
PreviewMouseRightButtonDown
MouseLeftButtonDown
MouseRightButtonDown
PreviewMouseLeftButtonUp
PreviewMouseRightButtonUp
MouseLeftButtonUp
MouseRightButtonUp
Preview 一般是隧道
捕獲鼠標
如果我們希望只能某個組件獨占鼠標,那么我們利用鼠標捕獲,讓該組件捕獲鼠標,從而鼠標點擊其他組件時無法進入到響應函數中。
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"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);
寫一個簡單拖拽類
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);電腦 電腦