// マウスボタン離した時 private void MainWindow_MouseUp(object sender, MouseButtonEventArgs e) { // メニューが開いているなら無効 if (MainWindow.Current.IsAnyToolbarMenuOpened) { return; } // マウスジェスチャ入力中 if (mouseGesture != null && mouseGesture.IsActive) { return; } Debug.WriteLine("mouse up : " + e.ChangedButton.ToString()); // 長押しクリック判定解除 StopLongClick(); // マウスクリックの状態取得 MouseButtonState mouseButtonState = mouseButtonStateSet.GetState(e.ChangedButton); // マウスインプット生成 MouseInputButton mouseInputButton = MouseInput.MouseButtonToMouseInputButton(e.ChangedButton); // 取得失敗 if (mouseButtonState == null) { return; } if (mouseInputButton == MouseInputButton.None) { return; } // 既に他の入力でコマンド実行済み if (mouseButtonState.CommandExecuted) { //e.Handled = true; } // マウスクリックコマンド実行 else if (mouseButtonState.IsPressed) { MouseInput mouseInput = new MouseInput(mouseInputButton, Keyboard.Modifiers); if (DispatchMouseInput(mouseInput)) { e.Handled = true; } } // 押下状態更新 mouseButtonState.IsPressed = false; }
// 長押しクリックの判定開始 private void StartLongClick(MouseButton mouseButton) { if (this.longClickTimer == null) { longClickTimer = new DispatcherTimer(); longClickTimer.Tick += (s, e) => { StopLongClick(); DispatchMouseInput(new MouseInput(longClickButton, Keyboard.Modifiers)); }; } StopLongClick(); longClickButton = MouseInput.MouseButtonToMouseInputLongClickButton(mouseButton); longClickStartPos = Win32.GetCursorPos(); longClickTimer.Interval = TimeSpan.FromMilliseconds(MainWindow.Current.Setting.LongClickDecisionTime); longClickTimer.Start(); }
public MouseInput(MouseInputButton btn, ModifierKeys modifierKeys) { MouseInputButton = btn; ModifierKeys = modifierKeys; }
public MouseInput() { MouseInputButton = MouseInputButton.None; ModifierKeys = ModifierKeys.None; }
// ダブルクリック private void MainWindow_MouseDoubleClick(object sender, MouseButtonEventArgs e) { Debug.WriteLine("------------------------------------------------------------------"); Debug.WriteLine("MainWindow_MouseDoubleClick original source:" + e.OriginalSource.ToString()); //Debug.WriteLine("Keybord focus:" + Keyboard.FocusedElement.ToString() ); Debug.WriteLine("------------------------------------------------------------------"); // Menu上、Slider上、Button上では無効 DependencyObject source = e.OriginalSource as DependencyObject; if (source == null) { return; } Menu menu = source.FindAncestor <Menu>(); if (menu != null) { return; } Slider slider = source.FindAncestor <Slider>(); if (slider != null) { return; } Button button = source.FindAncestor <Button>(); if (button != null) { return; } // メニューが開いているなら無効 if (MainWindow.Current.IsAnyToolbarMenuOpened) { return; } // マウスジェスチャ入力中 if (mouseGesture != null && mouseGesture.IsActive) { return; } // MouseInputButton mouseInputButton = MouseInputButton.None; if (e.ChangedButton == MouseButton.Left) { mouseInputButton = MouseInputButton.L_DoubleClick; } else if (e.ChangedButton == MouseButton.Right) { mouseInputButton = MouseInputButton.R_DoubleClick; } MouseInput mouseInput = new MouseInput(mouseInputButton, Keyboard.Modifiers); if (DispatchMouseInput(mouseInput)) { e.Handled = true; } }