[英]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.