如何在WPF中设置窗口的边框和标题栏的样式?

时间:2012-04-02 14:41:53

标签: wpf xaml styling

我们正在开发一个使用Telerik控件套件的WPF应用程序,一切正常,看起来很好。不幸的是,我们最近需要替换所有对话框的基类,通过标准WPF窗口更改RadWindow(原因与此讨论无关)。在这样做的过程中,我们最终得到的应用程序在所有开发人员的计算机上都显得非常漂亮(启用了Aero的Windows 7)但在我们的客户端环境(Windows Server 2008 R2下的终端服务)中使用时却很难看。

Telerik的RadWindow是一个标准的用户控件,可以模仿对话框的行为,因此造型不是问题。有了WPF的窗口,我很难改变它的“边界”。这里的“边框”是指带有图标的标题栏和3个标准按钮(最小化,最大化/恢复,关闭)以及窗口周围的调整大小。

如何更改这些项目的外观:

  • 标题栏颜色
  • 3个标准按钮
  • 窗口的真实边框颜色

尽可能使用圆角。

6 个答案:

答案 0 :(得分:26)

这些是“非客户”区域,由Windows控制。 Here is the MSDN docs on the subject(相关信息位于顶部)。

基本上,你设置Window的WindowStyle =“None”,然后建立你自己的窗口界面。 (similar question on SO

答案 1 :(得分:13)

您需要设置

WindowStyle="None"AllowsTransparency="True"和可选ResizeMode="NoResize"
然后将窗口的Style属性设置为自定义窗口样式,在其中设置窗口的外观(标题栏,按钮,边框)到您想要的任何内容,并在{{1}中显示窗口内容}。

This似乎是一篇关于如何实现这一目标的好文章,但互联网上还有很多其他文章。

答案 2 :(得分:6)

我在this question的@DK评论中找到了一个更直接的解决方案,解决方案由Alex和described here编写,包含源代码, 制作自定义窗口:

  1. 下载示例项目here
  2. 编辑generic.xaml文件以自定义布局。
  3. 享受:)。

答案 3 :(得分:3)

检查以下示例WPF customizing the appearance of a window in XAML

此示例显示如何完全自定义窗口的样式/外观,包括非客户区域:标题栏,边框,最大,最小和关闭按钮,同时仍提供所有预期功能。

答案 4 :(得分:1)

I suggest that you start from a base solution and customize it to fit your needs, that's better then starting from scratch!

I was looking for the same thing and I fall on this open source solution, I hope it will help.

答案 5 :(得分:1)

如果有人说您不能这样做,因为那将是非客户区域,只有Windows可以控制,这是错误的!

这只是事实的一半,因为Windows允许您为非客户区域指定大小。事实是,这在Windows的所有内核方法中都是可行的,并且您使用的是.NET,而不是C ++。无论如何,请放心! P / Invoke就是为了这样的事情!因此,您可以调用内核方法来设置非工作区。

但是,这是我很多次提出的非常复杂的解决方案。幸运的是,从.NET 4.5开始,您可以使用WindowChrome类根据需要设置非工作区。 Here您可以进入MSDN。

为了使事情更简单,更简洁,我将重定向here,这是将窗口边框大小更改为所需大小的指南。将其设置为0,就可以代替系统的自定义窗口边框。

我很抱歉没有发布明确的示例,但稍后我会确定的。