.NET Windows Forms应用程序是否使用原生的Win32控件来实现基本控件,如文本框和按钮?虽然WPF不是原生的,但Windows Forms看起来和感觉非常原生。按钮控件上的动画看起来确切地像一个Win32按钮。
是的,它们是... 但有几个例外。
WinForms 中的一些内容是自定义绘制的。它们使用本地控件,但它们打开了所有者绘制并在 C# 代码中处理某些绘制逻辑。这样做的优点是允许按钮等具有支持用户定义颜色而不是标准系统颜色的 BackColor
属性。通常应避免这样做(至少我认为是这样),因为该效果不仅难看,而且用户选择颜色方案的原因可能是有道理的。但是,图形设计师经常认为他们比用户更懂得更好,因此提供了此选项。
像这样实现的控件通常会公开一个 FlatStyle
属性,允许您更改它们的绘制方式(例如,ButtonBase.FlatStyle
)。使用 FlatStyle.Standard
,即使您没有使用不寻常的设置自定义控件的任何属性,.NET Framework 也会进行其正常的所有者绘制。使用 FlatStyle.System
,控件将直接由 Win32 渲染,没有任何所有者绘制或其他覆盖。
FlatStyle.System
时,按钮的蓝色悬停效果会逐渐淡入淡出。当设置为FlatStyle.Standard
时,蓝色发光突然出现并消失。接近,但不完全相同。组合框也会做同样的事情(至少在它们的DropDownStyle
属性设置为ComboBoxStyle.DropDownList
时)。FlatStyle.System
,除非您绝对需要不支持此FlatStyle的行为。最后,MenuStrip 和 ContextMenuStrip 控件完全由 C# 代码编写,并由 WinForms 手动绘制。它们没有任何原生的 Win32 控件支持。这就是为什么它们在 Windows Vista 及更高版本上看起来如此丑陋,因为它们永远使用 Office XP 样式。在 Windows XP 上看起来很酷,但在后来的版本中显得格格不入。将渲染样式从 Professional
更改为 System
也没有太大帮助。