繁体   English   中英

没有边框的可拖动WPF窗口

[英]Draggable WPF window with no border

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

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

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

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

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

使用隧道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(); };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM