private void WindowControlCanvas_MouseDown(object sender, MouseButtonEventArgs e) { WindowMovement.moveWindow(this, e); }
private void CheckMouseOver(object?sender, EventArgs e) { if (this.mouseOverWindows.Count == 0) { return; } bool isOver = false; IEnumerable <Window> windows = this.mouseOverWindows.Where(w => w.IsVisible && w.Opacity > 0); Point?cursor = null; // Window.IsMouseOver is false if the mouse is over the window border, check if that's the case. foreach (Window window in windows) { if (window.IsMouseOver) { isOver = true; break; } cursor ??= PresentationSource.FromVisual(window)?.CompositionTarget.TransformFromDevice .Transform(WindowMovement.GetCursorPos()); if (cursor is not null) { System.Windows.Rect rc = window.GetRect(); rc.Inflate(10, 10); if (rc.Contains(cursor.Value)) { isOver = true; if (this.mouseTimer is null) { // Keep an eye on the current position. this.mouseTimer = new DispatcherTimer(DispatcherPriority.Input) { Interval = TimeSpan.FromMilliseconds(100), }; this.mouseTimer.Tick += this.CheckMouseOver; this.mouseTimer.Start(); } break; } } } if (!isOver) { this.mouseTimer?.Stop(); this.mouseTimer = null; } if (this.mouseOver != isOver) { this.mouseOver = isOver; if (isOver) { this.MouseEnter?.Invoke(sender, new EventArgs()); } else { this.MouseLeave?.Invoke(sender, new EventArgs()); } } }
private void test_MouseDown(object sender, MouseButtonEventArgs e) { WindowMovement.moveWindow(this, e); }