DragMove()和最大化 [英] DragMove() and Maximize
问题描述
我在WPF中的自定义窗口有问题(AllowTransparency,WindowStyle = None). DragMove()方法效果很好,但是当我最大化窗口或Windows 7 Aero Snap自动最大化窗口时,此方法根本不起作用.因此,我无法通过鼠标拖动来取消捕捉窗口并将其状态返回到WindowState.Normal.左右Aero Snap效果不错,我可以无问题地捕捉和取消捕捉窗口.但是,当最大化时,除了Win + Down组合以外,其他任何方法都无效.也许有人知道如何解决此问题,或者在哪里可以找到其他方法来使用Aero Snap功能正常运行自定义窗口的DragMove?
I have a problem with my custom window (AllowTransparency, WindowStyle=None) in WPF. DragMove() method works good, but when I maximize window, or it maximizing automatically by Windows 7 Aero Snap, this method does not work at all. So I can't unsnap window with mouse drag and return it state to WindowState.Normal. Left and Right Aero Snap works good, I can snap and unsnap window without a problem. But when it maximized, nothing works except Win+Down combination. Maybe somebody knows how to solve this problem or where can I find other ways to do proper DragMove of custom window with working Aero Snap features?
推荐答案
这是我的方法.尝试使其更短)))
Here is my method. Try make it shorter )))
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;
}
}
}
(要获取screenSize,我使用本机方法)
(To get screenSize I use native methods)
这篇关于DragMove()和最大化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!