gpt4 book ai didi

wpf - DragMove() 和最大化

转载 作者:行者123 更新时间:2023-12-04 01:22:29 26 4
gpt4 key购买 nike

我在 WPF 中的自定义窗口(AllowTransparency,WindowStyle=None)有问题。 DragMove() 方法效果很好,但是当我最大化窗口时,或者通过 Windows 7 Aero Snap 自动最大化时,此方法根本不起作用。所以我不能用鼠标拖动取消捕捉窗口并将其状态返回到 WindowState.Normal。左右 Aero Snap 效果很好,我可以毫无问题地捕捉和取消捕捉窗口。但是当它最大化时,除了 Win+Down 组合之外什么都不起作用。也许有人知道如何解决这个问题,或者我在哪里可以找到其他方法来使用 Aero Snap 功能对自定义窗口进行适当的 DragMove 操作?

最佳答案

这是我的方法。试着让它更短 )))

private void InitHeader()
{
var border = Find<Border>("borderHeader");
var restoreIfMove = false;

border.MouseLeftButtonDown += (s, e) =>
{
if (e.ClickCount == 2)
{
if ((ResizeMode == ResizeMode.CanResize) ||
(ResizeMode == ResizeMode.CanResizeWithGrip))
{
SwitchState();
}
}
else
{
if (WindowState == WindowState.Maximized)
{
restoreIfMove = true;
}

DragMove();
}
};
border.MouseLeftButtonUp += (s, e) =>
{
restoreIfMove = false;
};
border.MouseMove += (s, e) =>
{
if (restoreIfMove)
{
restoreIfMove = false;
var mouseX = e.GetPosition(this).X;
var width = RestoreBounds.Width;
var x = mouseX - width / 2;

if (x < 0)
{
x = 0;
}
else
if (x + width > screenSize.X)
{
x = screenSize.X - width;
}

WindowState = WindowState.Normal;
Left = x;
Top = 0;
DragMove();
}
};
}

private void SwitchState()
{
switch (WindowState)
{
case WindowState.Normal:
{
WindowState = WindowState.Maximized;
break;
}
case WindowState.Maximized:
{
WindowState = WindowState.Normal;
break;
}
}
}
(为了获得屏幕尺寸,我使用 native 方法)

关于wpf - DragMove() 和最大化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11703833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com