我使用WindowStyle=None
删除WPF窗口的边框。在MainWindow.xaml.cs文件中,我刚刚将以下行添加到构造函数中:
this.MouseLeftButtonDown += delegate { this.DragMove(); };
这有点起作用,让我将窗口拖动到我在MainWindow内部左键单击的位置,只要它不在任何控件上。因为那是我遇到问题的地方。我有一个占据窗口内所有空间的文本框,一旦我这样做,我就不能再在文本框中左键单击时移动窗口了。
如果用户在窗口内部发出咔嗒声并拖动鼠标,无论用户使用何种控制方式,如何让窗口四处移动?
或者更简单,当用户在文本框控件内点击并拖动时,如何让窗口移动?
答案 0 :(得分:3)
使用隧道MouseDown事件,即Window的PreviewMouseLeftButtonDown
事件。这将确保事件在Window及其子控件上发生:
this.PreviewMouseLeftButtonDown += (s, e) => DragMove();
您还可以手动向TextBox添加事件:
textBox.MouseDown += (s, e) => DragMove();
<强>但是强>:
做你想做的事有其固有的问题。它不允许您在TextBox中选择文本。有一种解决方法 - 使用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(); };
}