Книги онлайн и без регистрации » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 313 314 315 316 317 318 319 320 321 ... 407
Перейти на страницу:
окно.

  string msg = "Do you want to close without saving?";

  MessageBoxResult result = MessageBox.Show(msg,

    "My App", MessageBoxButton.YesNo, MessageBoxImage.Warning);

  if (result == MessageBoxResult.No)

  {

   // Если пользователь не желает закрывать окно, тогда отменить закрытие.

    e.Cancel = true;

  }

}

private void MainWindow_Closed(object sender, EventArgs e)

{

  MessageBox.Show("See ya!");

}

Запустите программу и попробуйте закрыть окно, щелкнув либо на значке X в правом верхнем углу окна, либо на кнопке. Должно появиться диалоговое окно с запросом подтверждения. Щелчок на кнопке Yes (Да) приведет к отображению окна с прощальным сообщением, а щелчок на кнопке No (Нет) оставит окно в памяти.

Перехват событий мыши

Инфраструктура WPF предоставляет несколько событий, которые можно перехватывать, чтобы взаимодействовать с мышью. В частности, базовый класс UIElement определяет такие связанные с мышью события, как MouseMove, MouseUp, MouseDown, MouseEnter, MouseLeave и т.д.

В качестве примера обработайте событие MouseMove. Это событие работает в сочетании с делегатом System.Windows.Input.MouseEventHandler, который ожидает, что его целевой метод будет принимать во втором параметре объект типа System.Windows.Input.MouseEventArgs. С применением класса MouseEventArgs можно извлекать позицию (х, у) курсора мыши и другие важные детали. Взгляните на следующее неполное определение:

public class MouseEventArgs : InputEventArgs

{

  ...

  public Point GetPosition(IInputElement relativeTo);

  public MouseButtonState LeftButton { get; }

  public MouseButtonState MiddleButton { get; }

  public MouseDevice MouseDevice { get; }

  public MouseButtonState RightButton { get; }

  public StylusDevice StylusDevice { get; }

  public MouseButtonState XButton1 { get; }

  public MouseButtonState XButton2 { get; }

}

На заметку! Свойства XButton1 и XButton2 позволяют взаимодействовать с "расширенными кнопками мыши" (вроде кнопок "вперед" и "назад", которые имеются в некоторых устройствах). Они часто используются для взаимодействия с хронологией навигации браузера, чтобы перемещаться между посещенными страницами.

Метод GetPosition() позволяет получать значение (х, у) относительно какого-то элемента пользовательского интерфейса в окне. Если интересует позиция относительно активного окна, то нужно просто передать this. Обеспечьте обработку события MouseMove в конструкторе класса МаinWindow:

public MainWindow(string windowTitle, int height, int width)

{

  ...

  this.MouseMove += MainWindow_MouseMove;

}

Ниже приведен обработчик события MouseMove, который отобразит местоположение курсора мыши в области заголовка окна (обратите внимание, что возвращенный тип Point транслируется в строковое значение посредством вызова ToString()):

private void MainWindow_MouseMove(object sender,

  System.Windows.Input.MouseEventArgs e)

{

  // Отобразить в заголовке окна текущую позицию (х, у) курсора мыши.

  this.Title = e.GetPosition(this).ToString();

}

Перехват событий клавиатуры

Обработка клавиатурного ввода для окна, на котором находится фокус, тоже очень проста. В классе UIElement определено несколько событий, которые можно перехватывать для отслеживания нажатий клавиш клавиатуры на активном элементе (например, KeyUp и KeyDown). События KeyUp и KeyDown работают с делегатом System.Windows.Input.KeyEventHandler, который ожидает во втором параметре тип KeyEventArgs, определяющий набор важных открытых свойств:

public class KeyEventArgs : KeyboardEventArgs

{

  ...

  public bool IsDown { get; }

  public bool IsRepeat { get; }

  public bool IsToggled { get; }

  public bool IsUp { get; }

  public Key Key { get; }

  public KeyStates KeyStates { get; }

  public Key SystemKey { get; }

}

Чтобы проиллюстрировать организацию обработки события KeyDown в конструкторе МаinWindow (как делалось для предыдущих событий), можно реализовать обработчик события, который изменяет содержимое кнопки на информацию о текущей нажатой клавише:

private void MainWindow0s_KeyDown(object sender,

                                  System.Windows.Input.KeyEventArgs e)

{

  // Отобразить на кнопке информацию о нажатой клавише.

  ClickMe.Content = e.Key.ToString();

}

К настоящему моменту WPF может показаться всего лишь очередной инфраструктурой для построения графических пользовательских интерфейсов, которая предлагает (в большей или меньшей степени) те же самые службы, что и Windows Forms, MFC или VB6. Если бы это было именно так, тогда возникает вопрос о смысле наличия еще одного инструментального набора, ориентированного на создание пользовательских интерфейсов. Чтобы реально оценить уникальность WPF, потребуется освоить основанную на XML грамматику — XAML.

Резюме

Инфраструктура Windows Presentation Foundation (WPF) представляет собой набор инструментов для построения пользовательских интерфейсов, появившийся в версии .NET 3.0. Основная цель WPF заключается в интеграции и унификации множества ранее разрозненных настольных технологий (двумерная и трехмерная графика, разработка окон и элементов управления и т.п.) в единую программную модель. Помимо этого в приложениях WPF обычно применяется язык XAML, который позволяет определять внешний вид и поведение элементов WPF через разметку.

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

Разметка XAML является ключевым аспектом любого приложения WPF производственного уровня. В финальном примере главы было построено приложение WPF, которое продемонстрировало многие концепции, обсужденные в главе. В последующих главах эти и многие другие концепции будут рассматриваться более подробно.

Глава 25

Элементы управления, компоновки, события и привязка данных в WPF

 В главе 24 была представлена основа программной модели WPF, включая классы Window и Application, грамматику XAML и использование файлов кода. Кроме того, в ней было дано введение в процесс построения приложений WPF с применением визуальных конструкторов IDE-среды Visual Studio. В настоящей главе вы углубитесь в конструирование более сложных графических пользовательских интерфейсов с использованием нескольких новых элементов управления и диспетчеров компоновки, а также по ходу дела выясните дополнительные возможности визуального конструктора WPF в Visual Studio.

Здесь будут рассматриваться некоторые важные темы, связанные с элементами управления WPF, такие как программная модель привязки данных и применение команд управления. Вы узнаете, как работать с интерфейсами Ink API и Documents API,

1 ... 313 314 315 316 317 318 319 320 321 ... 407
Перейти на страницу:

Комментарии
Минимальная длина комментария - 20 знаков. В коментария нецензурная лексика и оскорбления ЗАПРЕЩЕНЫ! Уважайте себя и других!
Комментариев еще нет. Хотите быть первым?