【问题标题】:Are basic .NET Windows Forms controls native Win32 controls?基本的 .NET Windows 窗体控件是本机 Win32 控件吗?
【发布时间】:2013-04-17 11:38:22
【问题描述】:

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

【问题讨论】:

    标签: .net winforms winapi


    【解决方案1】:

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

    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 中,但它们绝对仍然可以使用并且不会出现在任何地方。同样,我强烈建议您改用这些,因为它们 100% 由本机 Win32 菜单支持,因此无论用户的 Windows 版本如何,它们看起来都应该如此。

    【讨论】:

    • @Jay 不,我没有要引用的特别参考。文档给出了一些提示,查看参考源也是如此。但最好的参考是我的经验。
    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多