【发布时间】:2013-04-17 11:38:22
【问题描述】:
.NET Windows 窗体应用程序是否对文本框和按钮等基本控件使用等效的本机 Win32 控件? WPF 是非原生的,但 Windows 窗体的外观和感觉都非常原生。 Button 控件上的动画看起来与 Win32 按钮完全一样。
【问题讨论】:
.NET Windows 窗体应用程序是否对文本框和按钮等基本控件使用等效的本机 Win32 控件? WPF 是非原生的,但 Windows 窗体的外观和感觉都非常原生。 Button 控件上的动画看起来与 Win32 按钮完全一样。
【问题讨论】:
是的,他们是……有几个例外。
WinForms 中的某些内容是自定义绘制的。他们使用本机控件,但他们打开所有者绘制并在 C# 代码内部处理一些绘图逻辑。这样做的好处是它允许按钮之类的东西具有BackColor 属性,该属性支持用户定义的颜色而不是标准的系统颜色。一般来说,应该避免这种情况(至少在我看来),因为不仅效果难看,用户选择他们所做的配色方案也可能是有原因的。但平面设计师通常认为他们比用户更了解,因此存在这种选择。
像这样实现的控件通常会公开一个 FlatStyle 属性,该属性允许您更改它们的绘制方式(例如,ButtonBase.FlatStyle)。使用FlatStyle.Standard,.NET Framework 会执行其正常的所有者绘图,即使您没有使用异常设置自定义任何控件的属性。使用FlatStyle.System,控件由 Win32 直接呈现,无需任何所有者绘制或其他覆盖。
您可以很容易地分辨出按钮上的区别。当设置为FlatStyle.System 时,按钮上的蓝色悬停效果会逐渐淡入淡出。当设置为FlatStyle.Standard 时,蓝色光芒突然出现又消失。接近,但不完全相同。组合框做同样的事情(至少当它们的 DropDownStyle 属性设置为 ComboBoxStyle.DropDownList 时)。
我建议将所有具有此类属性的控件设置为 FlatStyle.System,除非您绝对需要此 FlatStyle 不支持的行为。
还有其他几个例外。某些 WinForms 控件在 Win32 中不存在,因此它们不受本机控件的支持。 DataGridView 就是这种控件的一个很好的例子。
最后,MenuStrip 和 ContextMenuStrip 控件完全用 C# 代码编写,并由 WinForms 手动绘制。它们不受本机 Win32 控件的任何支持。这就是为什么它们在 Windows Vista 及更高版本上看起来如此丑陋的原因,因为它们永远停留在使用 Office XP 风格。它在 Windows XP 上看起来很酷,但在更高版本上却显得很突兀。将渲染样式从 Professional 更改为 System 也无济于事。
相反,您需要将这些控件的原始版本MainMenu 和ContextMenu 添加到您的工具箱中。默认情况下,它们不包含在最新版本的 Visual Studio 中,但它们绝对仍然可以使用并且不会出现在任何地方。同样,我强烈建议您改用这些,因为它们 100% 由本机 Win32 菜单支持,因此无论用户的 Windows 版本如何,它们看起来都应该如此。
【讨论】: