簡體   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