Почему на кнопках Windows Forms отсутствуют анимации в визуальном стиле Aero? - PullRequest
0 голосов
/ 24 ноября 2018

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

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

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

1 Ответ

0 голосов
/ 24 ноября 2018

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

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

В качестве альтернативы, вы можете использовать цикл, чтобы исправить всеконтролирует в форме процедурно.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...