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

时间:2018-11-24 09:31:00

标签: c# winforms

我用Windows 7上的一些按钮编写了一个C#Windows Forms程序。这些按钮使用内置的Aero样式,包括悬停和按下状态,但是它们不能像其他程序中的按钮一样在不同状态之间平滑淡入淡出。相反,它们只是立即过渡到新状态。我希望他们使用默认的Aero转场制作动画。

我尝试过的

  • 确保动画显示在其他程序中,例如操作系统提供的“运行”,“打开”和“保存”对话框。
  • 在“系统属性”>“性能选项”中启用了“确保Windows内的动画元素和控件”。
  • 在Windows 7 Basic,Windows 7 Aero和自定义视觉样式之间切换了我的操作系统视觉样式。
  • 添加了一个应用清单,该清单在dependentAssembly上指定了Microsoft.Windows.Common-Controls
  • 确保我在显示任何表格之前都打过Application.EnableVisualStyles()
  • 确保Application.RenderWithVisualStylestrue
  • 阅读Rendering Controls with Visual Styles,看看我是否有任何遗漏。

1 个答案:

答案 0 :(得分:2)

多亏了Matheus Pratta(出于某种原因)YouTube video,我才知道我必须对我不想破坏动画的每个按钮控件分别设置属性ButtonBase.FlatStyle = FlatStyle.System

要修复表单中的所有控件,可以在Visual Studio表单设计器中多选它们,然后使用“属性”面板。

或者,您可以使用循环来以程序形式修复所有控件。

InitializeComponent();
foreach (Control control in Controls)
{
    if (control is ButtonBase buttonControl)
    {
        buttonControl.FlatStyle = FlatStyle.System;
    }
}

仅仅为了使动画不中断而必须执行此操作似乎非常荒谬。我的应用程序很简单,只有一种形式,但是如果您有多种形式,则需要一种在整个应用程序中应用此修复程序的方法。如果您的类继承结构不允许您将此修复程序添加到超类怎么办,可能是因为您的表单类继承自各种不可更改的(可能是第三方)超类?您可以提取一个辅助方法,但是当您创建一个新的表单类而忘记调用该辅助方法时该怎么办呢?

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