我通过在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属性?