如何使用户控件只能从特定位置拖动

时间:2013-12-02 13:01:04

标签: c# wpf user-controls

我现在正在UserControl使用下面的代码(这是众所周知和使用的)使我可以拖动。此UserControl外观与MessageBox(灰色和蓝色矩形)类似,其任务是使此UserControl只能从蓝色矩形中拖动,就像任何{ {1}},而不是现在可以从里面的任何地方拖拽它!

有关如何做到这一点的任何建议?提前谢谢!

位于用于拖动MessageBox

的代码下方
UserControl

2 个答案:

答案 0 :(得分:0)

我想到的两个基本选项:

  1. 在UserControl中,使矩形成为边框(或其他控件),并将事件放在此边框上,而不是放在UserControl上。

  2. 如果出于某种原因,您确实希望事件在UserControl上,请在矩形的位置放置一个隐藏边框,并且只有当鼠标位于此边框上时才进行拖动。

答案 1 :(得分:0)

解决此问题的两种方法,实际上使用不同语法的方法相同:

  1. 通过代码 - 在构造函数中,而不是

    MouseLeftButtonDown += new MouseButtonEventHandler(root_MouseLeftButtonDown);
    MouseLeftButtonUp += new MouseButtonEventHandler(root_MouseLeftButtonUp);
    MouseMove += new MouseEventHandler(root_MouseMove);
    

    使用

    myBlueRect.MouseLeftButtonDown += 
               new MouseButtonEventHandler(root_MouseLeftButtonDown);`
    myBlueRect.MouseLeftButtonUp += 
               new MouseButtonEventHandler(root_MouseLeftButtonUp);
    myBlueRect.MouseMove += new MouseEventHandler(root_MouseMove);
    
  2. 通过XAML - 在您想要放置的相关元素的标记中(假设它是Grid):

    <Grid x:Name="myBlueRect"
          MouseLeftButtonDown="root_MouseLeftButtonDown" 
          MouseLeftButtonUp="root_MouseLeftButtonUp"
          MouseMove="root_MouseMove"
          .../>