【问题标题】:Move a borderless window in wpf在 wpf 中移动无边框窗口
【发布时间】:2013-12-17 00:42:38
【问题描述】:

在我的 C# WinForms 应用程序中,我有一个隐藏默认控件的主窗口。

所以为了让我可以移动它,我在主窗口中添加了以下内容:

private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;
private const int WM_NCLBUTTONDBLCLK = 0x00A3;

protected override void WndProc(ref Message message)
{
    if (message.Msg == WM_NCLBUTTONDBLCLK)
    {
        message.Result = IntPtr.Zero;
        return;
    }

    base.WndProc(ref message);

    //Allow window to move
    if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
        message.Result = (IntPtr)HTCAPTION;
}

我有一个 WPF 应用程序,其中还隐藏了默认控件,我也想这样做。我看到主窗口是从“窗口”派生的,所以上面的代码不起作用。 如何在 WPF 中执行此操作?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    为此,您需要将事件处理程序附加到窗口的MouseDown 事件,检查鼠标左键是否被按下并在窗口上调用DragMove 方法。

    以下是具有此功能的窗口示例:

    public partial class MyWindow : Window
    {
        public MyWindow()
        {
            InitializeComponent();
            MouseDown += Window_MouseDown;
        }
    
        private void Window_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left)
                DragMove();
        }
    }
    

    【讨论】:

    • 使用它会导致我通过 MouseUp 或 PreviewMouseUp 调用的标签不再收到信号。
    • @TheMuffinMan 如果可以的话,我会尝试使用 MouseUp 作为标签,或者使用样式为标签的按钮并使用点击事件。
    【解决方案2】:

    这里超级简单:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多