gpt4 book ai didi

c# - 无边框的可拖动 WPF 窗口

转载 作者:太空狗 更新时间:2023-10-29 23:29:45 24 4
gpt4 key购买 nike

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

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

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

如果用户在窗口内左键单击并拖动鼠标,无论用户点击的是什么控件,我如何让窗口四处移动?

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

最佳答案

使用隧道式 MouseDown 事件,即窗口的 PreviewMouseLeftButtonDown 事件。这将确保事件同时发生在 Window 及其子控件上:

this.PreviewMouseLeftButtonDown += (s, e) => DragMove();

您还可以手动向文本框添加事件:

textBox.MouseDown += (s, e) => DragMove();

但是:

做你想做的事情有其内在的问题。它不会让您选择文本框中的文本。有一个解决方法 - 使用 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(); };
}

关于c# - 无边框的可拖动 WPF 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34581188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com