Почему на кнопках Windows Forms отсутствуют анимации в визуальном стиле Aero?

2

Я написал программу С# для Windows Forms с некоторыми кнопками в Windows 7. Кнопки используют встроенный стиль Aero, включая состояния наведения и нажатия, но они не плавно переходят между различными состояниями, как кнопки в других программах. Вместо этого они просто сразу переходят в новое состояние. Я хочу, чтобы они анимировались с переходами Aero по умолчанию.

Что я пробовал

  • Убедитесь, что анимации появляются в других программах, таких как диалоги "Выполнить", "Открыть" и "Сохранить", предоставляемые ОС.
  • Убедитесь, что "Анимация элементов и элементов управления в окнах" включена в "Свойства системы"> "Параметры производительности".
  • Изменил мой визуальный стиль ОС между Windows 7 Basic, Windows 7 Aero и пользовательским визуальным стилем.
  • Добавлен манифест приложения, в котором указана dependentAssembly для Microsoft.Windows.Common-Controls.
  • Убедитесь, что я вызывал Application.EnableVisualStyles() прежде чем показывать какие-либо формы.
  • Гарантированное Application.RenderWithVisualStyles было true.
  • Прочитайте элементы управления рендерингом с помощью визуальных стилей, чтобы узнать, что я пропустил.
  • 0
    .NET 2.0 поддерживает Win98 и Win2000. Это было проблемой, ее встроенная кнопка была слишком хромой, чтобы ее можно было использовать. Поэтому они решили создать свой собственный «чистый» элемент управления .NET, который не зависит от встроенного элемента управления. Нет анимации. Извлечение вашего собственного класса из класса .NET и настройка его так, как вы хотите, чтобы вы могли использовать его снова и снова без какого-либо кода или необходимости изменять свойства в конструкторе, является довольно важной техникой кодирования Winforms.
Теги:
winforms

1 ответ

2

Благодаря видео Матеуса Пратты (по какой-то причине) на YouTube я узнал, что мне нужно индивидуально установить свойство ButtonBase.FlatStyle = FlatStyle.System для каждого из моих элементов управления кнопками, чтобы не ButtonBase.FlatStyle = FlatStyle.System анимации.

Чтобы исправить все элементы управления в форме, можно выбрать их несколько раз в конструкторе форм Visual Studio и использовать панель "Свойства".

Кроме того, вы можете использовать цикл для процедурного исправления всех элементов управления в форме.

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

Кажется очень смешным, что вам придется делать это только для разрыва анимации. Мое приложение простое и имеет одну форму, но если у вас много форм, вам нужен способ применить это исправление для всего приложения. Что если ваша структура наследования классов не позволяет вам добавить это исправление в суперкласс, возможно потому, что ваши классы форм наследуются от множества неизменяемых (возможно, сторонних) суперклассов? Вы можете извлечь вспомогательный метод, но что делать, когда вы создаете новый класс формы и забываете вызывать вспомогательный метод?

Должен быть способ выбрать FlatStyle.System в качестве параметра для всего приложения, и он может быть даже включен по умолчанию, потому что каждая другая программа в ОС использует эти анимации на своих кнопках.

  • 0
    Да, это было одной из самых неприятных вещей для меня, когда я разрабатывал с WinForms. Самым близким, что я нашел, было создание подклассов, но, как вы можете себе представить, это обходной путь - отстой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню