Как сделать кнопку назад в wpf
В WPF кнопки представлены целым рядом классов, которые наследуются от базового класса ButtonBase:

Button
Элемент Button представляет обычную кнопку:
От класса ButtonBase кнопка наследует ряд событий, например, Click, которые позволяют обрабатывать пользовательский ввод.
Чтобы связать кнопку с обработчиком события нажатия, нам надо определить в самой кнопке атрибут Click . А значением этого атрибута будет название обработчика в коде C#. А затем в самом коде C# определить этот обработчик.
Например, код xaml:
И обработчик в коде C#:
private void Button_Click(object sender, RoutedEventArgs e)
Либо можно не задавать обработчик через атрибут, а стандартным образом для C# прописать в коде: button1.Click+=Button_Click;
Кнопка имеет такие свойства как IsDefault и IsCancel , которые принимают значения true и false.
Если свойство IsDefault установлено в true, то при нажатии клавиши Enter будет вызываться обработчик нажатия этой кнопки.
Аналогично если свойство IsCancel будет установлено в true, то при нажатии на клавишу Esc будет вызываться обработчик нажатия этой кнопки.
Например, определим код xaml:
А в коде MainWindow.xaml.cs определим следующий код C#:
using System.Windows; namespace ControlsApp < public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); >private void acceptButton_Click(object sender, RoutedEventArgs e) < MessageBox.Show("Действие выполнено"); >private void escButton_Click(object sender, RoutedEventArgs e) < this.Close(); // закрытие окна >> >
Теперь при нажатии на клавишу Enter будет отображаться сообщение, а при нажатии на Esc будет происходить выход из приложения и закрытие окна.
RepeatButton
Отличительная особенность элемента RepeatButton — непрерывная генерация события Click , пока нажата кнопка. Интервал генерации события корректируется свойствами Delay и Interval .
Сам по себе элемент RepeatButton редко используется, однако он может служить основой для создания ползунка в элементах ScrollBar и ScrollViewer, в которых нажатие на ползунок инициирует постоянную прокрутку.
ToggleButton
Представляет элементарный переключатель. Может находиться в трех состояниях — true, false и «нулевом» (неотмеченном) состоянии, а его значение представляет значение типа bool? в языке C#. Состояние можно установить или получить с помощью свойства IsChecked . Также добавляет три события — Checked (переход в отмеченное состояние), Unchecked (снятие отметки) и Intermediate (если значение равно null). Чтобы отрабатывать все три события, надо установить свойство IsThreeState=»True»
ToggleButton, как правило, сам по себе тоже редко используется, однако при этом он служит основой для создания других более функциональных элементов, таких как checkbox и radiobutton.
Как в WPF создать кнопку, при наведении на которую, под текстом появилась горизонтальная черта?
1) Поместить в шаблон просто TextBlock, добавить в него стиль, триггер, который при наведении будет выставлять значение атрибута TextDecoration в Underline. Проблема — нету события Click.
2) Поместить внутрь ContentPresenter. Отсутствует атрибут TextDecoration.
Не могли бы вы подсказать способ, который помог бы решить задачу без проблем?
- Вопрос задан более трёх лет назад
- 3705 просмотров
Перемещение кнопки по форме мышью в WPF
В WPF идея такая же: запоминать точку клика и двигать по дельте. Нюанс в том, что контролы имеют абсолютные координаты только внутри Canvas (ну или с помощью отступов).
MainWindow.xaml
MainWindow.xaml.cs
using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace MouseMovableControl < public partial class MainWindow < private Point? _movePoint; public MainWindow() =>InitializeComponent(); private void Btn_OnMouseDown(object sender, MouseButtonEventArgs e) < _movePoint = e.GetPosition(btn); btn.CaptureMouse(); >private void Btn_OnMouseUp(object sender, MouseButtonEventArgs e) < _movePoint = null; btn.ReleaseMouseCapture(); >private void Btn_OnMouseMove(object sender, MouseEventArgs e) < if (_movePoint == null) return; var p = e.GetPosition(this) - (Vector)_movePoint.Value; Canvas.SetLeft(btn, p.X); Canvas.SetTop(btn, p.Y); >> >
Конкретно батоны двигать несколько затруднительно, потому что они проглатывают сообщения о кликах мыши.
Пошаговое руководство. Создание кнопки с помощью XAML
Это пошаговое руководство предназначено для изучения того, как с помощью XAML можно создать анимированную кнопку для использования в приложении Windows Presentation Foundation. В этом пошаговом руководстве для создания ресурса настраиваемой кнопки используются стили и шаблон, что обеспечивает повторное использование кода и разделение логики кнопки от объявления кнопки. Код в этом пошаговом руководстве полностью написан на языке XAML.
В этом пошаговом руководстве показано, как можно создать приложение путем ввода или копирования и вставки кода на языке XAML в Visual Studio. Если вы хотите узнать, как для создания того же приложения использовать конструктор, см. статью Создание кнопки с помощью Microsoft Expression Blend.
На следующем рисунке показаны готовые кнопки.
Создание основных кнопок
Начнем с создания проекта и добавления нескольких кнопок в окно.
Создание проекта WPF и добавление кнопок в окно
- Запустите среду Visual Studio.
- Создайте новый проект WPF: в меню Файл нажмите сначала пункт Создать, а затем Проект. Найдите шаблон Приложение Windows (WPF) и назначьте проекту имя «AnimatedButton». В результате будет создана основная структура для приложения.
- Добавьте основные кнопки по умолчанию: Все файлы, необходимые для этого пошагового руководства, предоставляются шаблоном. Откройте файл Window1.xaml, дважды щелкнув его в Обозревателе решений. По умолчанию в файле Window1.xaml есть элемент Grid. Удалите элемент Grid и добавьте несколько кнопок на страницу XAML, введя или вставив следующий фрагмент кода в файл Window1.xaml:
Задание основных свойств
Давайте настроим некоторые свойств этих кнопок, чтобы осуществить управление их внешним видом и макетом. Вместо того, чтобы настраивать свойства кнопок по отдельности, нужно использовать ресурсы для определения свойств кнопок во всем приложении. Ресурсы приложений концептуально похожи на внешние каскадные таблицы стилей (CSS) для веб-страниц; однако ресурсы намного эффективней каскадных таблицы стилей (CSS), в чем можно будет убедиться в конце этого пошагового руководства. Дополнительные сведения о ресурсах см. в разделе Ресурсы XAML.
Использование стилей для задания основных свойств кнопок
- Определите блок Application.Resources: откройте файл app.xaml и добавьте следующий выделенный фрагмент разметки, если он еще отсутствует в этом файле:
Создание шаблона, определяющего внешний вид кнопки
В этом разделе создается шаблон, который настраивает внешний вид (представление) кнопки. Внешний вид кнопки состоит из нескольких объектов, включая прямоугольники и другие компоненты, позволяющие придать кнопке уникальный вид.
До сих пор управление тем, как кнопки выглядят в приложении, ограничивалось изменением свойств кнопки. А что если нужно внести более радикальные изменения во внешний вид кнопки? Шаблоны предоставляют более широкие возможности по управлению внешним видом объекта. Так как шаблоны можно использовать в стилях, шаблоны применимы ко всем объектам, к которым применяется стиль (в этом пошаговом руководстве это кнопка).
Использование шаблона для определения внешнего вида кнопки
- Настройте шаблон: вследствие того, что у таких элементов управления, как Button имеется свойство Template, можно определить значение свойства шаблона также, как другие значения свойств, которые задавались ранее в объекте Style с помощью объекта Setter. Добавьте следующий выделенный фрагмент с разметкой в стиль кнопки.
" RadiusX="20" RadiusY="20" StrokeThickness="5" Fill="Transparent" /> " RadiusX="20" RadiusY="20" /> " TextBlock.Foreground="Black" />
Эти ресурсы используются как свойство Fill для прямоугольника, который вставляется в объект Grid из шаблона кнопки. Добавьте в шаблон следующий выделенный фрагмент с разметкой.
" TextBlock.Foreground="Black" />
Создание интерактивности для кнопки
В этом разделе создаются триггеры свойств и триггеры событий, выполняющие изменение значений свойств и запуск анимации в ответ на действия пользователя, такие как перемещение указателя мыши на кнопку и нажатие кнопки.
Простым способом для добавления интерактивности (при наведении указателя мыши, выходе указателя мыши, нажатии кнопки мыши и т. д.) является определение триггеров в шаблоне или стиле. Чтобы создать Trigger, нужно определить условие для свойства, например: значение свойства IsMouseOver у кнопки равняется true . Затем нужно определить методы задания (действия), которые выполняются, когда условие триггера имеет значение «true».
Создание интерактивности для кнопки
- Добавьте в шаблон триггеры: добавьте выделенный фрагмент с разметкой в свой шаблон.
"> " TextBlock.Foreground="Black" />
Итоги
В этом пошаговом руководстве были выполнены следующие практические задания:
- Создание объекта Style в соответствии с целевым типом объекта (Button).
- Управление основными свойствами кнопок во всем приложении с помощью объекта Style.
- Создание таких ресурсов, как градиенты, используемые в соответствии со значениями свойств из методов задания Style.
- Настройка внешнего вида кнопок во всем приложении путем применения к кнопкам шаблона.
- Настройка поведения кнопок в ответ на действия пользователя (такие как MouseEnter, MouseLeave и Click) с эффектами анимации.
См. также
- Создание кнопки с помощью Microsoft Expression Blend
- Стилизация и использование шаблонов
- Общие сведения об эффектах анимации
- Общие сведения о закраске сплошным цветом и градиентом
- Общие сведения об эффектах для точечных рисунков
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.