2016-01-03 25 views
5

Bir WPF penceresinin kenarlığını kaldırmak için WindowStyle=None kullanıyorum. Bu biraz çalışır ve ben MainWindow içini tıklayın sol her yerde beni sürece herhangi olmasın da, etrafında pencereyi sürüklemek sağlarSınırsız sürüklenen WPF penceresi

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

: MainWindow.xaml.cs dosyası olarak sadece yapıcı aşağıdaki satırı eklendi kontrol. Çünkü sorun yaşadığım yer burası. Pencerenin içindeki tüm alanı kaplayan bir metin kutum var ve bunu yaptığım anda metin kutusuna tıklandığında pencereyi hareket ettiremiyorum.

Kullanıcı pencerenin içinde tıklarsa ve kullanıcının hangi denetimi kullandığı fark etmeden fareyi sürüklerse pencereyi nasıl hareket ettirebilirim?

Veya daha basit, kullanıcı, metin kutusu denetiminin içinde tıklayıp sürüklediğinde pencereyi nasıl hareket ettirebilirim?

cevap

3

Pencerenin tünellenen MouseDown olayını, yani PreviewMouseLeftButtonDown olayını kullanın.

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

Ama:

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

elle de TextBox için bir etkinlik ekleyebilirsiniz: Bu olay Window hem oluşur ve alt kontrol sağlayacaktır

İstediğiniz şeyi yapmak, kendi içsel sorunları vardır. TextBox'ta metin seçmenize izin vermez. Bir çözüm yoktur - Böyle bir Key + MouseDrag girişini kullanmak:

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(); }; 
} 
+0

Ben etrafında penceresini taşımak için ctrl tutun gerektireceğinden rağmen bu çözüm gibi. Bana mantıklı geliyor. –

İlgili konular