Как работает свойство WPF Button.IsCancel?

Основная идея кнопки «Отмена» – включить закрытие windows с помощью Escape Keypress.

Вы можете установить свойство IsCancel на кнопке Cancel на значение true, в результате чего кнопка Cancel автоматически закроет диалоговое окно без обработки события Click.

Источник: Программирование WPF (Griffith, Sells)

Так что это должно работать

   

Однако поведение, которое я ожидаю, не работает для меня. Родительское окно – это основное окно приложения, указанное свойством Application.StartupUri. Что работает

  private void CloseWindow(object sender, RoutedEventArgs) { this.Close(); } 
  • Является ли поведение IsCancel разным в зависимости от того, является ли Окно нормальным окном или диалогом? Работает ли IsCancel, как рекламируется, только если вызывается ShowDialog?
  • Является ли явным обработчиком щелчка для кнопки (с IsCancel установлено значение true), чтобы закрыть окно в прессе Escape?

Да, он работает только в диалогах, поскольку нормальное окно не имеет понятия «отмена», это то же самое, что DialogResult.Cancel возвращается из ShowDialog в WinForms.

Если вы хотите закрыть окно с побегом, вы можете добавить обработчик в PreviewKeyDown в окне, выбрать, будет ли Key.Escape и закрыть форму:

 public MainWindow() { InitializeComponent(); this.PreviewKeyDown += new KeyEventHandler(CloseOnEscape); } private void CloseOnEscape(object sender, KeyEventArgs e) { if (e.Key == Key.Escape) Close(); } 

Мы можем принять ответ Стива еще на один шаг и создать прикрепленное свойство, которое обеспечивает функциональность «побег на закрытии» для любого windows. Напишите свойство один раз и используйте его в любом окне. Просто добавьте в окно XAML следующее:

 yournamespace:WindowService.EscapeClosesWindow="True" 

Вот код для свойства:

 using System.Windows; using System.Windows.Input; ///  /// Attached behavior that keeps the window on the screen ///  public static class WindowService { ///  /// KeepOnScreen Attached Dependency Property ///  public static readonly DependencyProperty EscapeClosesWindowProperty = DependencyProperty.RegisterAttached( "EscapeClosesWindow", typeof(bool), typeof(WindowService), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnEscapeClosesWindowChanged))); ///  /// Gets the EscapeClosesWindow property. This dependency property /// indicates whether or not the escape key closes the window. ///  ///  to get the property from /// The value of the EscapeClosesWindow property public static bool GetEscapeClosesWindow(DependencyObject d) { return (bool)d.GetValue(EscapeClosesWindowProperty); } ///  /// Sets the EscapeClosesWindow property. This dependency property /// indicates whether or not the escape key closes the window. ///  ///  to set the property on /// value of the property public static void SetEscapeClosesWindow(DependencyObject d, bool value) { d.SetValue(EscapeClosesWindowProperty, value); } ///  /// Handles changes to the EscapeClosesWindow property. ///  ///  that fired the event /// A  that contains the event data. private static void OnEscapeClosesWindowChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Window target = (Window)d; if (target != null) { target.PreviewKeyDown += new System.Windows.Input.KeyEventHandler(Window_PreviewKeyDown); } } ///  /// Handle the PreviewKeyDown event on the window ///  /// The source of the event. /// A  that contains the event data. private static void Window_PreviewKeyDown(object sender, KeyEventArgs e) { Window target = (Window)sender; // If this is the escape key, close the window if (e.Key == Key.Escape) target.Close(); } } 

Это не совсем верно, так это … MSDN говорит следующее: если вы установите для свойства IsCancel кнопки значение true, вы создаете кнопку, зарегистрированную в AccessKeyManager. Затем кнопка активируется, когда пользователь нажимает клавишу ESC. Таким образом, вам нужен обработчик в коде. И вам не нужны какие-либо прикрепленные свойства или что-то в этом роде

Да, это правильно. В Windows Application в WPF AcceptButton и Cancel Button есть. Но одно дело в том, что если вы устанавливаете видимость управления как ложную, то она не будет работать так, как ожидалось. Для этого вам нужно сделать видимым, как true, в WPF. Например: (он не работает для кнопки «Отмена», потому что здесь видимость ложна)

  

Итак, вам нужно сделать это:

  

Затем вы записываете btnClose_Click в код за файлом:

 private void btnClose_Click (object sender, RoutedEventArgs e) { this.Close(); } 
  • Как сделать ссылку html похожим на кнопку?
  • Как программно открыть меню опций?
  • Невозможно добавить текст в виде кнопки в андроид-студии
  • Изменение текста кнопки onclick
  • Добавить параметр в событие Click Button
  • Обнаружить кнопку средней кнопки (кнопка прокрутки) с помощью jQuery
  • Segue и Button программно быстро
  • Как создать пользовательскую кнопку формы с селектором в android?
  • как изменить фоновое изображение кнопки при нажатии / фокусировке?
  • Прикрепите параметр к действию button.addTarget в Swift
  • Как я могу удерживать кнопку нажатой после нажатия на нее?
  • Interesting Posts

    React Native error: «Невозможно определить версию java из« 9.0.1 ».»

    Вход в кросс-домен – как автоматически войти в систему при переходе из одного домена в другой

    получение контекста в AsyncTask

    Шаблон Word 2010 с автоматически обновляемыми полями

    Что такое ошибка «Неверная инструкция: 4» и почему «-mmacosx-version-min = 10.x» исправить?

    Есть ли какая-либо библиотека C / C ++ для подключения к удаленному NTP-серверу?

    Как узнать, зарегистрирован ли пользователь в файле passport.js?

    Новое контекстное меню Windows 8: официальное название и документация?

    Изучение регулярных выражений

    Горячая клавиша для «вставить ярлык» в обозревателе Windows 7

    Где я могу получить ключ разработчика Google?

    Разница между >>> и >>

    Как получить цвета из Windows 7 «Классическая тема» в Windows 8?

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

    Создание аргументов java-метода в качестве окончательного

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