Как сделать кнопку назад в wpf
Перейти к содержимому

Как сделать кнопку назад в wpf

  • автор:

Как сделать кнопку назад в wpf

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

Кнопки Button в WPF

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 и добавление кнопок в окно

  1. Запустите среду Visual Studio.
  2. Создайте новый проект WPF: в меню Файл нажмите сначала пункт Создать, а затем Проект. Найдите шаблон Приложение Windows (WPF) и назначьте проекту имя «AnimatedButton». В результате будет создана основная структура для приложения.
  3. Добавьте основные кнопки по умолчанию: Все файлы, необходимые для этого пошагового руководства, предоставляются шаблоном. Откройте файл Window1.xaml, дважды щелкнув его в Обозревателе решений. По умолчанию в файле Window1.xaml есть элемент Grid. Удалите элемент Grid и добавьте несколько кнопок на страницу XAML, введя или вставив следующий фрагмент кода в файл Window1.xaml:
        

Задание основных свойств

Давайте настроим некоторые свойств этих кнопок, чтобы осуществить управление их внешним видом и макетом. Вместо того, чтобы настраивать свойства кнопок по отдельности, нужно использовать ресурсы для определения свойств кнопок во всем приложении. Ресурсы приложений концептуально похожи на внешние каскадные таблицы стилей (CSS) для веб-страниц; однако ресурсы намного эффективней каскадных таблицы стилей (CSS), в чем можно будет убедиться в конце этого пошагового руководства. Дополнительные сведения о ресурсах см. в разделе Ресурсы XAML.

Использование стилей для задания основных свойств кнопок

  1. Определите блок Application.Resources: откройте файл app.xaml и добавьте следующий выделенный фрагмент разметки, если он еще отсутствует в этом файле:

Создание шаблона, определяющего внешний вид кнопки

В этом разделе создается шаблон, который настраивает внешний вид (представление) кнопки. Внешний вид кнопки состоит из нескольких объектов, включая прямоугольники и другие компоненты, позволяющие придать кнопке уникальный вид.

До сих пор управление тем, как кнопки выглядят в приложении, ограничивалось изменением свойств кнопки. А что если нужно внести более радикальные изменения во внешний вид кнопки? Шаблоны предоставляют более широкие возможности по управлению внешним видом объекта. Так как шаблоны можно использовать в стилях, шаблоны применимы ко всем объектам, к которым применяется стиль (в этом пошаговом руководстве это кнопка).

Использование шаблона для определения внешнего вида кнопки

  1. Настройте шаблон: вследствие того, что у таких элементов управления, как 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».

Создание интерактивности для кнопки

  1. Добавьте в шаблон триггеры: добавьте выделенный фрагмент с разметкой в свой шаблон.
 ">                       " TextBlock.Foreground="Black" />   

Итоги

В этом пошаговом руководстве были выполнены следующие практические задания:

  • Создание объекта Style в соответствии с целевым типом объекта (Button).
  • Управление основными свойствами кнопок во всем приложении с помощью объекта Style.
  • Создание таких ресурсов, как градиенты, используемые в соответствии со значениями свойств из методов задания Style.
  • Настройка внешнего вида кнопок во всем приложении путем применения к кнопкам шаблона.
  • Настройка поведения кнопок в ответ на действия пользователя (такие как MouseEnter, MouseLeave и Click) с эффектами анимации.

См. также

  • Создание кнопки с помощью Microsoft Expression Blend
  • Стилизация и использование шаблонов
  • Общие сведения об эффектах анимации
  • Общие сведения о закраске сплошным цветом и градиентом
  • Общие сведения об эффектах для точечных рисунков

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *