使用按钮在桌面上拖动WPF窗口

问题描述 投票:0回答:3

我尝试用一​​个按钮拖动我的窗口,我有这个代码用于拖动MouseDown事件

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

但我想用一些按钮来做这个,因为我的表格是透明的,当我更改Button事件的代码时,它不起作用

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

一些想法?

c# wpf drag
3个回答
1
投票

使用border而不是Button。因为DragMove只适用于PrimaryMouseButton事件。不适用于Click事件

XAML

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

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

0
投票

我的终极代码在这里:

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

0
投票

你必须使用PreviewMouseDown而不是MouseDown事件。并且不要忘记最后标记事件“Handled”。

XAML代码:

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

C#代码:

private void Window_Main_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == System.Windows.Input.MouseButton.Left)
    {
        this.DragMove();
        e.Handled = true;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.