Как изменить фон для кнопки MouseOver в WPF?

У меня есть кнопка на моей странице с этим XAML:

  

Но когда я накладываю мышь на мою кнопку, фон кнопки меняет на серый цвет окон по умолчанию.
В чем проблема?

Это изображение кнопки до и после мыши:
До:
До
После:
После

    Чтобы удалить поведение MouseOver по умолчанию на Button вам необходимо изменить ControlTemplate . Изменение вашего определения Style на следующее должно сделать трюк:

      

    EDIT: Это несколько лет спустя, но вы действительно можете установить кисть границы внутри границы, которая находится там. Idk, если это было указано, но похоже, что это было …

    Это сработало для меня.

    Стиль кнопки

               

    кнопка

      

    Заметки

    • На кнопке отображается маленький синий крест, похожий на тот, который использовался для закрытия windows.
    • Установив фон сетки на «Прозрачный», он добавляет hittest, а это означает, что если мышь находится где-то над кнопкой, тогда она будет работать. Опустите этот тег, и кнопка загорится, если мышь находится над одной из векторных линий в значке (это не очень удобно).

    Просто хочу поделиться своим стилем из моего ResourceDictionary, который я использовал. Вы можете свободно изменять фон onHover в триггерах стиля. « ColorAnimation To = * ваш желаемый BG (т.е. # FFCEF7A0)». Кнопка BG также автоматически вернется к исходному BG после состояния mouseOver. Вы даже можете установить скорость перехода.

    Словарь ресурсов

      

    все, что вам нужно сделать, это назвать стиль.

    Пример реализации

      

    Несколько более сложный ответ, который использует ControlTemplate и имеет эффект анимации (адаптирован с https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/customizing-the-appearance-of-an-existing- контроль )

    В своем ресурсном словаре определите шаблон управления для вашей кнопки, как этот:

                                 

    в вашем XAML вы можете использовать шаблон выше для своей кнопки, как показано ниже:

    Определите свою кнопку

      

    Надеюсь, поможет

    Все ответы до сих пор include полную замену поведения кнопки по умолчанию чем-то другим. Тем не менее, имхо полезно и важно понять, что можно изменить только часть, о которой вы заботитесь , путем редактирования существующего шаблона по умолчанию для элемента XAML.

    В случае обращения с эффектом наведения на кнопку WPF изменение внешнего вида в элементе Button WPF вызвано Trigger в стиле по умолчанию для Button , который основан на свойстве IsMouseOver и устанавливает свойства Background и BorderBrush элемента верхнего уровня верхнего уровня в шаблоне управления. Фон элемента Button находится под фоном элемента Border , поэтому изменение свойства Button.Background не препятствует тому, чтобы эффект зависания Button.Background .

    С некоторыми усилиями вы можете переопределить это поведение с помощью своего собственного сеттера, но поскольку элемент, который вам нужно повлиять, находится в шаблоне, а не напрямую доступен в вашем собственном XAML, этот подход будет затруднен, а ИМХО слишком сложным.

    Другой вариант – использовать графику как Content для Button а не Background . Если вам нужен дополнительный контент по графике, вы можете объединить их с Grid в качестве объекта верхнего уровня в контенте.

    Однако, если вы буквально просто хотите полностью отключить эффект наведения (а не просто скрывать его), вы можете использовать Visual Studio XAML Designer:

    1. Во время редактирования XAML выберите вкладку «Дизайн» .
    2. На вкладке «Дизайн» найдите кнопку, для которой вы хотите отключить эффект.
    3. Щелкните эту кнопку правой кнопкой мыши и выберите «Редактировать шаблон / Изменить копию …» . Выберите в подсказке, где вы хотите разместить новый ресурс шаблона. Это будет ничего не делать, но на самом деле дизайнер добавит новые ресурсы, где вы сказали, и изменил элемент кнопки, чтобы ссылаться на стиль, который использует эти ресурсы в качестве шаблона кнопки.
    4. Теперь вы можете изменить этот стиль. Самое простое – удалить или закомментировать (например, Ctrl + E , C ) элемент ... . Конечно, вы можете внести любые изменения в шаблон, который вы хотите в этот момент.

    Когда вы закончите, стиль кнопки будет выглядеть примерно так:

                                                         

    (Примечание: вы можете опустить квалификацию пространства имен p: XML в фактическом коде … Я предоставляю их здесь только потому, что форматирование кода XML с переполнением стека путается элементами

    которые не имеют полностью квалифицированного имени с пространством имен XML .)

    Если вы хотите применить тот же стиль к другим кнопкам, вы можете просто щелкнуть их правой кнопкой мыши и выбрать «Редактировать шаблон / Применить ресурс» и выбрать стиль, который вы только что добавили для первой кнопки. Вы даже можете сделать стиль стилем по умолчанию для всех кнопок, используя обычные методы применения стиля по умолчанию к элементам в XAML.

    Давайте будем гением компьютера.