C# 为什么我的Windows窗体按钮上缺少Aero视觉样式动画?

C# 为什么我的Windows窗体按钮上缺少Aero视觉样式动画?,c#,winforms,C#,Winforms,我在Windows7上用一些按钮编写了一个WindowsForms程序。按钮使用内置的Aero样式,包括悬停和按下状态,但它们不会像其他程序中的按钮那样在不同状态之间平滑衰减。相反,他们只是立即过渡到新的状态。我希望它们使用默认的Aero过渡设置动画 我试过的 确保动画出现在其他程序中,如操作系统提供的运行、打开和保存对话框。 确保在“系统属性”>“性能选项”中启用了对窗口内的元素和控件设置动画。 在Windows 7 Basic、Windows 7 Aero和自定义视觉样式之间切换我的操作系统

我在Windows7上用一些按钮编写了一个WindowsForms程序。按钮使用内置的Aero样式,包括悬停和按下状态,但它们不会像其他程序中的按钮那样在不同状态之间平滑衰减。相反,他们只是立即过渡到新的状态。我希望它们使用默认的Aero过渡设置动画

我试过的 确保动画出现在其他程序中,如操作系统提供的运行、打开和保存对话框。 确保在“系统属性”>“性能选项”中启用了对窗口内的元素和控件设置动画。 在Windows 7 Basic、Windows 7 Aero和自定义视觉样式之间切换我的操作系统视觉样式。 添加了在Microsoft.Windows.Common-Controls上指定dependentAssembly的应用程序清单。 确保在显示任何表单之前调用Application.EnableVisualStyles。 确保Application.RenderWithVisualStyles为真。 看看我是否遗漏了什么。 由于Matheus Pratta的原因,我了解到我必须在我的每个按钮控件上单独设置属性ButtonBase.FlatStyle=FlatStyle.System,我不想破坏动画

要修复窗体中的所有控件,可以在Visual Studio窗体设计器中多选它们并使用“属性”面板

或者,您可以使用循环按程序修复表单中的所有控件

初始化组件; 控件中的foreach控件 { 如果控件为ButtonBase Button控件 { buttonControl.FlatStyle=FlatStyle.System; } } 这似乎非常可笑,你会这样做只是为了不破坏动画。我的应用程序很简单,只有一个表单,但如果您有许多表单,您可能需要一种方法来在整个应用程序中应用此修复程序。如果您的类继承结构不允许您将此修复添加到超类,可能是因为您的表单类继承自各种不可更改的第三方超类,该怎么办?您可以提取一个helper方法,但是当您创建一个新的表单类而忘记调用helper方法时会怎样呢


应该有一种方法可以选择使用FlatStyle.System作为应用程序范围的设置,它甚至可以在默认情况下启用,因为操作系统中的所有其他程序都在按钮上使用这些动画。

是的,这是我使用WinForms开发时最烦人的事情之一。我所遇到的最接近解决方案是子类化,但正如您可能想象的那样,解决方案糟透了..NET 2.0支持Win98和Win2000。这是一个问题,它的内置按钮太旧,无法使用。所以他们决定自己制作一个纯.NET控件,不依赖内置控件。没有动画。从.NET类派生您自己的类并按照您想要的方式对其进行调整,这样您就可以反复使用它,而无需编写任何代码或在设计器中更改属性,这是一项非常重要的Winforms编码技术。