C# 如何在不使用AllowTransparency的情况下删除WPF窗口的非客户端区域

C# 如何在不使用AllowTransparency的情况下删除WPF窗口的非客户端区域,c#,.net-3.5,C#,.net 3.5,我想从我的WPF自定义窗口中删除调整大小的边框。 我已经发现我必须处理WM_NCCALCSIZE消息并返回0。 这将删除边框并将窗口与窗口的左上角对齐。 问题是这样做会增加客户端区域,而WPF根控件不会增加。 这将在窗口的左侧和底部创建黑色边缘,我希望消除这些边缘 我使用的是VS2010 C Windows XP,希望它能在Windows XP和Windows 7下运行 提前谢谢 编辑: 我找到了黑色边缘的原因,它们是后面的窗户。 现在看来问题在于窗口的根元素没有占据整个窗口。当我将其边距设置为

我想从我的WPF自定义窗口中删除调整大小的边框。 我已经发现我必须处理WM_NCCALCSIZE消息并返回0。 这将删除边框并将窗口与窗口的左上角对齐。 问题是这样做会增加客户端区域,而WPF根控件不会增加。 这将在窗口的左侧和底部创建黑色边缘,我希望消除这些边缘

我使用的是VS2010 C Windows XP,希望它能在Windows XP和Windows 7下运行

提前谢谢

编辑: 我找到了黑色边缘的原因,它们是后面的窗户。 现在看来问题在于窗口的根元素没有占据整个窗口。当我将其边距设置为负值时,它会在黑色区域上绘制。显然,布局过程正常,所需大小与窗口相同,但渲染大小不同

我还发现,从窗口样式中删除WS_THICKFRAME可以解决整个问题。问题是只有在使用WS_THICKFRAME时才启用调整大小功能。我正在使用WM_NCHITTEST进行大小调整,如果窗口知道它没有大小调整边框,它将关闭其大小调整功能

我想让根元素占据整个窗口,以消除黑色窗口背景,或者启用本机调整大小功能,而不使用厚框架


谢谢。

我找到了那个黑色区域的原因。 我使用的其他人编写的代码似乎在某种程度上破坏了框架的布局过程,从而导致了根元素的正确大小,从而造成了黑色区域。 我在另一个项目中处理了WM_NCCALCSIZE,它工作起来很有魅力

在这一切之后,虽然我找到了一种空闲的方法来创建一个具有所有原始窗口功能的自定义窗口,但我决定使用微软提供的标准窗口,这样我的程序将来就可以与windows兼容

如果有人想要WPF窗口定制的代码或帮助,他们可以在这里发表评论,我会提供帮助,这样至少我所有的研究不会白费


谢谢阅读。

您能提供代码吗