【问题标题】:How to apply visual style for Windows classic theme in Win form using C#如何使用 C# 在 Win 窗体中应用 Windows 经典主题的视觉样式
【发布时间】:2011-02-28 11:15:23
【问题描述】:

我正在为我的 Windows 应用程序使用 VisualStyleRenderer,它非常适用于 Windows XP 主题,但不适用于 Windows 经典主题。任何人都可以建议我如何使应用程序主题可支持。

更新:

让我用清晰的图片来描述它。我有一个列表视图,在列表项上,我正在使用 VisualStyleRenderer 类绘制一个按钮,并使用一些渐变颜色绘制该按钮区域。它适用于 Windows XP 主题,但是当我将主题更改为 Windows 经典时,按钮 wffect 没有出现,这是我使用 VisualStyleRenderer 类绘制的。

任何帮助将不胜感激

提前致谢。

【问题讨论】:

  • 我认为如果你描述它是如何不工作的,给你很好的答案会更容易。
  • 好的,那么让我给你一个清晰的图片我有一个列表视图,在列表项上我正在使用 VisualStyleRenderer 类绘制一个按钮,并使用一些渐变颜色绘制该按钮区域。它适用于 Windows XP 主题,但是当我将主题更改为 Windows 经典时,按钮 wffect 没有出现,这是我使用 VisualStyleRenderer 类绘制的。
  • 很难想象您期望会发生什么。查看屏幕上显示的其他按钮:它们呈现的视觉风格是什么? “经典”3D 风格,对吧?那么为什么你的应用程序应该以不同的方式呈现它们呢?如果是这样,它会像拇指酸痛一样伸出来。这就是视觉风格的全部意义,让屏幕上的所有窗口/控件保持一致的主题。
  • @Cody:您能否介意给我任何链接或示例示例,它们会给我一些提示以更好地开发我的应用程序
  • 我没有发现您的应用程序有任何错误。选择经典主题后,您的计算机上首先没有打开视觉样式。我在下面的回答提供了更多详细信息,但关键是当没有视觉样式时,您不能使用 VisualStyleRenderer 以视觉样式呈现事物。我会使用if 声明,风格为this example

标签: c# winforms visual-styles


【解决方案1】:

这不会发生。 Windows 经典主题没有“视觉样式”。这就是“经典”的含义:它是在视觉样式发明之前使用多年的主题。

Windows XP's Luna theme 是第一个支持视觉样式的。 Windows Vista 和 7 中包含的 Aero theme 也支持视觉样式,尽管它们看起来略有不同。

如果您使用VisualStyleRenderer 类,则将根据用户选择的主题进行绘制。正如您所说,当您选择 Windows XP 主题时,一切看起来都很好。选择 Classic 主题后,将使用 Classic 主题进行绘制。这是预期的行为;系统中的其他一切看起来也不同。

您需要检查是否支持视觉样式,如果不支持,请退回到其他绘图方法。有一个可用的示例here on MSDN。最简单的做法是添加一个if 语句,用于评估Application.RenderWithVisualStyles property 返回的值。如果为真,您可以使用VisualStyleRenderer 类进行绘制。如果是假的,你需要把它踢老派。使用ControlPaint class 可能是一个好方法。

【讨论】:

  • 非常感谢 Cody 的赞赏回答
  • 这是错误的 windows 实际上使用了一个经典主题,当您禁用 winforms 的视觉样式时,您可以看出这一点。看起来完全不一样
  • 是的,Windows 10 的工作方式不同。这个答案是 10 年前写的,@Shadowblitz16,当时 Windows 经典主题是通过关闭 off 视觉样式来实现的。
  • 经典堆栈溢出不会让我删除我的downvote Xd
  • 答案必须经过编辑才能更改您的投票,@Shadowblitz16。这取决于您,但是...自从编写答案以来澄清事物新状态的编辑不会出现问题。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2010-12-23
相关资源
最近更新 更多