简体   繁体   中英

Drag a WPF window around the desktop with button

I try to drag my window with a button, i have this code for dragging with the MouseDown Event

 private void Window_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left)
                this.DragMove();
        }

but i will like to do this with some button, because my Form is transparent, and when i change the code for the Button event it does not work

private void Window_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left)
                this.DragMove();
        }

Some ideas?

Use border instead of Button. Because DragMove only work on PrimaryMouseButton event. Not work on Click event

XAML

<Border Background="Blue" MouseLeftButtonDown="Border_MouseLeftButtonDown">
</Border>

CODE

private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
        DragMove();
}

My Finally Code was here:

private Point startPoint;
private void btnChat_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            startPoint = e.GetPosition(btnChat);
        }

        private void btnChat_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            var currentPoint = e.GetPosition(btnChat);
            if (e.LeftButton == MouseButtonState.Pressed &&
                btnChat.IsMouseCaptured &&
                (Math.Abs(currentPoint.X - startPoint.X) >
                    SystemParameters.MinimumHorizontalDragDistance ||
                Math.Abs(currentPoint.Y - startPoint.Y) >
                    SystemParameters.MinimumVerticalDragDistance))
            {
                // Prevent Click from firing
                btnChat.ReleaseMouseCapture();
                DragMove();
            }
        }

You have to use PreviewMouseDown instead of MouseDown event. And do not forget to mark the event "Handled" in the end.

XAML code:

<Button x:Name="Button_Move" PreviewMouseDown="Window_Main_MouseDown"/>

C# code:

private void Window_Main_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == System.Windows.Input.MouseButton.Left)
    {
        this.DragMove();
        e.Handled = true;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM