相关疑难解决方法(0)

WPF无边框窗口问题:Aero Snap和最大化

我通过在XAML中设置以下窗口属性创建了一个无边框WPF窗口:

... WindowStyle="None" AllowsTransparency="True" ...
Run Code Online (Sandbox Code Playgroud)

这会导致许多问题:

1)已解决:它不再具有任何内置的调整大小功能

2)已解决:它不再具有任何内置拖动功能

3)已解决:没有顶部工具栏,它不再具有最小化/最大化/恢复/关闭按钮

4)已解决:通过aero快照最大化或设置WindowState可防止它被取消.

5)通过aero快照最大化或设置WindowState将使用整个屏幕作为边界,与窗口工具栏重叠.

6)通过aero快照最大化或设置WindowState似乎包含-7边距,使窗口的每边7个像素超出窗口边缘.

通过制作xaml窗口模板来解决1-3.我使用了不可见的矩形作为句柄区域,后面的一些代码通过覆盖OnApplyTemplate()来应用,通过user32.dll SendMessage(...)附加功能,用于调整大小/移动/最小化/最大化/恢复/关闭.

我在这里找到了#4的答案

我尝试通过WndProc拦截最大化消息并手动设置大小/位置来解决5-6,但是这有一个问题,即将RestoreRegion覆盖到最大化的大小/位置,从而无法恢复窗口.

真正奇怪的是,从顶部边框调整窗口大小到屏幕顶部会触发aero full height snap,没有任何问题.

所以,我已经走了很长的路,但5-6仍然是一个问题......有没有办法手动指定最大化区域?或者,有没有办法设置窗口大小而不影响restoreregion属性?

c# wpf wndproc aero

8
推荐指数
2
解决办法
8492
查看次数

标签 统计

aero ×1

c# ×1

wndproc ×1

wpf ×1