6

.NET Windows 窗体应用程序是否将等效的本机 Win32 控件用于文本框和按钮等基本控件?WPF 是非原生的,但 Windows 窗体的外观和感觉都非常原生。Button 控件上的动画看起来与 Win32 按钮完全一样。

4

1 回答 1

9

是的,他们是……有几个例外。

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是此类控件的一个很好的示例。

最后,MenuStripContextMenuStrip控件完全用 C# 代码编写并由 WinForms 手动绘制。它们不受本机 Win32 控件的任何支持。这就是为什么它们在 Windows Vista 及更高版本上看起来如此丑陋的原因,因为它们永远停留在使用 Office XP 风格。它在 Windows XP 上看起来很酷,但在更高版本上却显得很突兀。将渲染样式从Professionalto更改System也无济于事。

相反,您需要将这些控件的原始版本MainMenuContextMenu添加到您的工具箱中。默认情况下,它们不包含在最新版本的 Visual Studio 中,但它们绝对仍然可以使用并且不会出现在任何地方。再次,我强烈建议使用它们,因为它们 100% 由本机 Win32 菜单支持,因此无论用户的 Windows 版本如何,它们看起来都应该如此。

于 2013-04-24T04:20:59.533 回答