none
WPF DragMove() RRS feed

  • 问题

  • I want to drag the window, but when I call the function "this.DragMove()", 

    the app break and show message "Can only call DragMove when primary mouse button is down.".

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    I want to know how to notice the window Mouse left button is down?

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    cs:

    public void OnPlayPanelMouseLeftButtonDown(object sender, AsyncEventWithDataArgs<Point> e)
    {
          this.DragMove();

    }

    2012年5月15日 7:37

答案

  • 很聪明哈哈,就是这样的。我想是无法通知窗口MouseLeftButtonDown事件或者改变其状态了,看来只能像您说的那样做了!非常感谢!!!
    • 已标记为答案 Maxlovexxx 2012年5月16日 14:30
    2012年5月16日 14:30

全部回复

  • The left mouse button must be down when DragMove is called. One way to detect when the left mouse button is pressed is to handle the MouseLeftButtonDown event.

    When DragMove is called, the left mouse button must be depressed over an exposed area of the window's client area.

    You should see http://msdn.microsoft.com/en-us/library/system.windows.window.dragmove.aspx for more details.


    Wanpeng wanpeng.ones@gmail.com

    2012年5月15日 9:07
  • I know that what you said. I call DragMove when my custom panel MouseLeftButtonDown(custom event) in window(A), and I want A's Owner Window(B) run DragMove function. What I should do to notice or set B's MouseLeftButtonDown state?
    2012年5月15日 11:02
  • 由于你在邮件中没有进一步的追加说明,我对你的需求进行了大胆的猜测。

    试想你可能需要在Window A的某个自定义控件中拖动某个控件以完成对Window B的拖动模拟。

    这时不能使用DragMove()方法,因为B窗体并没有捕获鼠标事件,你应当在处理自定义控件的拖动事件时,同时更新Window B的位置。

    简单的参考代码:

            <Canvas Grid.Row="1" Height="200" Name="canvas" Background="AliceBlue">
                <Thumb Name="thumb" Width="20" Height="20" Canvas.Left="0" Canvas.Top="0" Background="Green" DragDelta="thumb_DragDelta" />
            </Canvas>

            Window b;
            
            public MainWindow() {
                InitializeComponent();
                this.WindowState = System.Windows.WindowState.Maximized;
                b = new Window();
                b.Title = "B";
                b.Left = 0;
                b.Top = 0;
                b.Height = 200;
                b.Width = 200;
                b.Topmost = true;
                b.Show();
            }
    
            private void thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) {
                Canvas.SetLeft(thumb, e.HorizontalChange + Canvas.GetLeft(thumb));
                Canvas.SetTop(thumb, e.VerticalChange + Canvas.GetTop(thumb));
                b.Left += e.HorizontalChange * 10;
                b.Top += e.VerticalChange * 10;
            }


    Wanpeng wanpeng.ones@gmail.com

    2012年5月16日 3:11
  • 很聪明哈哈,就是这样的。我想是无法通知窗口MouseLeftButtonDown事件或者改变其状态了,看来只能像您说的那样做了!非常感谢!!!
    • 已标记为答案 Maxlovexxx 2012年5月16日 14:30
    2012年5月16日 14:30