我需要创建一个带有WindowStyle.None、 AllowsTransparency = true等自定义窗口。
其中一个要求是定制 ResizeGrip 控件。
我已经通过使用 ResizeMode.CanResizeWithGrip 实现了此功能,并从以下开源项目中获取了一些代码: Fluid Kit
如果您感兴趣,请查看 "GlassWindow" 类。
为了完成这项工作,我正在调用以下代码来处理 ResizeGrip 的 MouseLeftButtonDown 事件:
NativeMethods.SendMessage(_interopHelper.Handle, WM.SYSCOMMAND, (IntPtr)((int)SC.SIZE + (int)sizingAction), IntPtr.Zero);
SizingAction 的定义如下:
enum SizingAction
{
West = 1,
East = 2,
North = 3,
NorthWest = 4,
NorthEast = 5,
South = 6,
SouthWest = 7,
SouthEast = 8,
}
一切都运行正常,但是我注意到当你通过左下(或任何左侧或顶部)调整大小时会出现一些奇怪的情况。您可以看到WPF窗口在大小和位置更改时重新绘制(从顶部或左侧调整大小时始终发生)。如果您尝试在具有默认窗口样式和调整大小模式的任何窗口上执行此操作,则可以正常工作。除了XP之外,您必须使用经典主题。是否有人知道使用此功能的替代方法?或修复它的方法?我还在MSDN论坛上发布了一些信息,在这里:MSDN论坛。PS-如果有人想要svn检出Fluid Kit并通过在其示例项目中设置StartupUri =“GlassWindow / Window1.xaml”来运行GlassWindow示例,就可以亲眼看到这种行为。编辑:微软告诉我发送产品建议...如果有人遇到类似问题,请单击此处查看链接:产品建议。如果您想亲自尝试,请在此处放置一个示例:示例。