基本的.NET Windows Forms控件是本地Win32控件吗?

6
.NET Windows Forms应用程序是否使用原生的Win32控件来实现基本控件,如文本框和按钮?虽然WPF不是原生的,但Windows Forms看起来和感觉非常原生。按钮控件上的动画看起来确切地像一个Win32按钮。
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 上看起来很酷,但在后来的版本中显得格格不入。将渲染样式从 Professional 更改为 System 也没有太大帮助。

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

@Jay 不,我没有特定的引用可以引用。文档提供了一些提示,查看参考源代码也有帮助。但最好的参考是我的经验。 - Cody Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接