2014-10-29 37 views
0

我有一個用戶控件,我試圖讓它拖動。除了當您點擊按鈕或文本框時,整個控件應該是可拖動的。我正在處理usercontrol本身的mousedown,mouseup和mousemove事件,並且可以通過點擊任意位置來拖動它。唯一的問題是現在我無法點擊用戶控件上的任何按鈕。任何線索怎麼回事?在UserControl上添加點擊處理程序Breaks Click on Children

代碼是這樣的:

<UserControl PreviewMouseLeftButtonDown="Popup_PreviewMouseLeftButtonDown" ....STUFF...> 
    <!-- CAN'T CLICK THIS --> 
    <Button /> 
<UserControl> 

代碼背後:

public void Popup_PreviewMouseLeftButtonDown(object sender, MouseEventArgs e) 
{ 
    mouseDown = true; 
    oldMousePosition = this.PointToScreen(e.GetPosition(this)); 
    this.Popup.Child.CaptureMouse(); 
} 
+0

@GrantWinney它沒有。我會更新代碼。 – Jeff 2014-10-29 00:39:58

+0

我回答說,我認爲這是一個ZIndex的關注,但我把它收回。彈出窗口的孩子是什麼樣的控制者? – furkle 2014-10-29 00:47:54

+0

@furkle它是一個System.Windows.Controls.Button。 – Jeff 2014-10-29 00:49:37

回答

0

當您使用CaptureMouse(問題出現) - 此永久捕獲窗口上的所有鼠標輸入,使這樣你就無法點擊窗口內的任何東西。我不知道它是否與你不同,或者如果你選中了,但不是(僅)該按鈕不可點擊 - 這就是說,窗口上的所有內容都是無法點擊的。

在捕獲鼠標後,您必須使用鼠標實際進行操作,然後一旦完成操作,必須通過調用Mouse.Capture(null)返回正常控件。對你來說,這可能是你的MouseUp()方法中最好的做法。

但是,這仍然留下孩子的問題。我無法真正想到你將能夠捕獲父控件上的所有鼠標點擊事件允許它們進入子控件。我想你可以根據按鈕位置檢查鼠標位置,兩者都相對於UserControl,然後每次都將click事件發送到Button,但是這看起來有點過分。是否有一個原因,你不能只是添加一個全尺寸的網格到用戶控件的ZIndex比按鈕更低,並且只是用它來檢測點擊是在UserControl內而不是在Button上進行的?

相關問題