没有边框的可拖动WPF窗口

时间:2016-01-03 20:22:09

标签: c# wpf draggable

我使用WindowStyle=None删除WPF窗口的边框。在MainWindow.xaml.cs文件中,我刚刚将以下行添加到构造函数中:

this.MouseLeftButtonDown += delegate { this.DragMove(); };

这有点起作用,让我将窗口拖动到我在MainWindow内部左键单击的位置,只要它不在任何控件上。因为那是我遇到问题的地方。我有一个占据窗口内所有空间的文本框,一旦我这样做,我就不能再在文本框中左键单击时移动窗口了。

如果用户在窗口内部发出咔嗒声并拖动鼠标,无论用户使用何种控制方式,如何让窗口四处移动?

或者更简单,当用户在文本框控件内点击并拖动时,如何让窗口移动?

1 个答案:

答案 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(); };
}