无边框的可拖动 WPF window
Draggable WPF window with no border
我正在使用 WindowStyle=None
删除 WPF window 的边框。在 MainWindow.xaml.cs 文件中,我刚刚将以下行添加到构造函数中:
this.MouseLeftButtonDown += delegate { this.DragMove(); };
这有点管用,让我可以将 window 拖到 MainWindow 中我左键单击的任何地方,只要它不在任何控件上即可。因为那是我遇到问题的地方。我有一个文本框占据了 window 内的所有 space,一旦我这样做,我就无法再在文本框内左键单击时移动 window。
如果用户在 window 中左键单击并拖动鼠标,无论用户点击什么控件,我如何让 window 移动?
或者更简单,当用户左键单击并在文本框控件内拖动时,如何使 window 移动?
使用隧道式 MouseDown 事件,即 Window 的 PreviewMouseLeftButtonDown
事件。这将确保事件同时发生在 Window 及其子控件上:
this.PreviewMouseLeftButtonDown += (s, e) => DragMove();
您也可以手动向文本框添加事件:
textBox.MouseDown += (s, e) => DragMove();
但是:
做自己想做的事情有其固有的问题。它不会让您在 TextBox 中输入 select 文本。有一个解决方法 - 使用这样的 Key + MouseDrag
输入:
bool isKeyPressed = false;
public MainWindow()
{
InitializeComponent();
this.PreviewKeyDown += (s1, e1) => { if (e1.Key == Key.LeftCtrl) isKeyPressed = true; };
this.PreviewKeyUp += (s2, e2) => { if (e2.Key == Key.LeftCtrl) isKeyPressed = false; };
this.PreviewMouseLeftButtonDown += (s, e) => { if (isKeyPressed) DragMove(); };
}
我正在使用 WindowStyle=None
删除 WPF window 的边框。在 MainWindow.xaml.cs 文件中,我刚刚将以下行添加到构造函数中:
this.MouseLeftButtonDown += delegate { this.DragMove(); };
这有点管用,让我可以将 window 拖到 MainWindow 中我左键单击的任何地方,只要它不在任何控件上即可。因为那是我遇到问题的地方。我有一个文本框占据了 window 内的所有 space,一旦我这样做,我就无法再在文本框内左键单击时移动 window。
如果用户在 window 中左键单击并拖动鼠标,无论用户点击什么控件,我如何让 window 移动?
或者更简单,当用户左键单击并在文本框控件内拖动时,如何使 window 移动?
使用隧道式 MouseDown 事件,即 Window 的 PreviewMouseLeftButtonDown
事件。这将确保事件同时发生在 Window 及其子控件上:
this.PreviewMouseLeftButtonDown += (s, e) => DragMove();
您也可以手动向文本框添加事件:
textBox.MouseDown += (s, e) => DragMove();
但是:
做自己想做的事情有其固有的问题。它不会让您在 TextBox 中输入 select 文本。有一个解决方法 - 使用这样的 Key + MouseDrag
输入:
bool isKeyPressed = false;
public MainWindow()
{
InitializeComponent();
this.PreviewKeyDown += (s1, e1) => { if (e1.Key == Key.LeftCtrl) isKeyPressed = true; };
this.PreviewKeyUp += (s2, e2) => { if (e2.Key == Key.LeftCtrl) isKeyPressed = false; };
this.PreviewMouseLeftButtonDown += (s, e) => { if (isKeyPressed) DragMove(); };
}