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 (Нет) оставит окно в памяти.

<p id="AutBody_Root1106"><strong>Перехват событий мыши</strong></p>

Инфраструктура 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();

}

<p id="AutBody_Root1107"><strong>Перехват событий клавиатуры</strong></p>

Обработка клавиатурного ввода для окна, на котором находится фокус, тоже очень проста. В классе 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; }

Перейти на страницу:

Похожие книги