此问题在此处已有答案:
How to create custom window chrome in wpf?(5个答案)
两个月前关门了。
我们正在开发一个WPF应用程序,它使用Telerik的一套控件,一切都工作正常。不幸的是,我们最近需要替换所有对话框的基类,将RadWindow改为标准的WPF窗口(原因与本讨论无关)。在这样做时,我们最终得到的应用程序在所有开发人员的计算机上看起来都很漂亮(启用了Aero的Windows 7),但在我们的客户端环境(Windows Server 2008 R2下的终端服务)中使用时却很难看。
Telerik的RadWindow是一个标准的用户控件,它模仿对话框的行为,所以样式不是问题。但是对于WPF的Window,我很难改变它的“边框”。我这里所说的“边框”是指带有图标的标题栏和3个标准按钮(最小化、最大化/恢复、关闭)以及窗口周围的调整大小手柄。
如何更改这些项目的外观:
- 标题栏颜色
- 3个标准按钮
- 窗口的真实的边框颜色
如果可能的话,带圆角。
5条答案
按热度按时间c3frrgcw1#
这些是“非客户端”区域,由Windows. Here is the MSDN docs on the subject控制(相关信息在顶部)。
基本上,你设置你的窗口的WindowStyle=“None”,然后建立你自己的窗口界面。
uemypmqf2#
您需要设置
WindowStyle="None"
、AllowsTransparency="True"
和可选的ResizeMode="NoResize"
然后将窗口的
Style
属性设置为自定义窗口样式,在该样式中可以将窗口的外观(标题栏、按钮、边框)设计为所需的任何样式,并以ContentPresenter
显示窗口内容。This似乎是一篇关于如何实现这一点的好文章,但互联网上还有很多其他文章。
gtlvzcf83#
我发现了一个更直接的解决方案,从@DK评论在this question,该解决方案是由亚历克斯和described here写的源代码,使自定义窗口:
1.下载示例项目here
1.编辑通用的.xaml文件以自定义布局。
1.享受:)。
yrwegjxp4#
诸如“您不能,因为只有Windows可以控制非工作区”之类的说法并不完全正确- Windows允许您指定非工作区的尺寸。
缺点是,这只能通过调用Windows的内核方法来实现,而且由于您使用的是.NET,而不是本机代码,因此您将需要P/Invoke。(请记住,整个Windows窗体UI和控制台应用程序I/O方法都是作为 Package 提供的,这些 Package 在后台进行系统调用。)因此,正如MSDN中所述,完全可以使用P/Invoke访问设置非客户区所需的那些方法。
更新:比以往更简单!
从.NET 4.5开始,您可以使用
WindowChrome
类来调整非工作区。here和here是更改窗口边框尺寸的指南。通过将其设置为0
,您将能够实现自定义窗口边框来代替系统的边框。56lgkhnf5#
我建议您从现有的解决方案开始,并根据您的需求进行定制,这比从头开始要好!
我正在寻找同样的东西,我落在this开源解决方案,我希望它会有帮助。