internal void SetDefaultButton() { this.Focus(); //kind of acts like a selective 'IsDefault' mechanism. switch (this.ButtonStyle) { case MessageDialogStyle.Affirmative: PART_AffirmativeButton.Focus(); break; case MessageDialogStyle.AffirmativeAndNegative: case MessageDialogStyle.AffirmativeAndNegativeAndDoubleAuxiliary: case MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary: PART_NegativeButton.Focus(); break; } }
internal Task <MessageDialogResult> WaitForButtonPressAsync() { Dispatcher.BeginInvoke(new Action(() => { this.Focus(); //kind of acts like a selective 'IsDefault' mechanism. if (ButtonStyle == MessageDialogStyle.Affirmative) { PART_AffirmativeButton.Focus(); } else if (ButtonStyle == MessageDialogStyle.AffirmativeAndNegative) { PART_NegativeButton.Focus(); } })); TaskCompletionSource <MessageDialogResult> tcs = new TaskCompletionSource <MessageDialogResult>(); RoutedEventHandler negativeHandler = null; KeyEventHandler negativeKeyHandler = null; RoutedEventHandler affirmativeHandler = null; KeyEventHandler affirmativeKeyHandler = null; RoutedEventHandler firstAuxHandler = null; KeyEventHandler firstAuxKeyHandler = null; RoutedEventHandler secondAuxHandler = null; KeyEventHandler secondAuxKeyHandler = null; Action cleanUpHandlers = () => { PART_NegativeButton.Click -= negativeHandler; PART_AffirmativeButton.Click -= affirmativeHandler; PART_FirstAuxiliaryButton.Click -= firstAuxHandler; PART_SecondAuxiliaryButton.Click -= secondAuxHandler; PART_NegativeButton.KeyDown -= negativeKeyHandler; PART_AffirmativeButton.KeyDown -= affirmativeKeyHandler; PART_FirstAuxiliaryButton.KeyDown -= firstAuxKeyHandler; PART_SecondAuxiliaryButton.KeyDown -= secondAuxKeyHandler; }; negativeKeyHandler = new KeyEventHandler((sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Negative); } }); affirmativeKeyHandler = new KeyEventHandler((sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Affirmative); } }); firstAuxKeyHandler = new KeyEventHandler((sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.FirstAuxiliary); } }); secondAuxKeyHandler = new KeyEventHandler((sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.SecondAuxiliary); } }); negativeHandler = new RoutedEventHandler((sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Negative); e.Handled = true; }); affirmativeHandler = new RoutedEventHandler((sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Affirmative); e.Handled = true; }); firstAuxHandler = new RoutedEventHandler((sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.FirstAuxiliary); e.Handled = true; }); secondAuxHandler = new RoutedEventHandler((sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.SecondAuxiliary); e.Handled = true; }); PART_NegativeButton.KeyDown += negativeKeyHandler; PART_AffirmativeButton.KeyDown += affirmativeKeyHandler; PART_FirstAuxiliaryButton.KeyDown += firstAuxKeyHandler; PART_SecondAuxiliaryButton.KeyDown += secondAuxKeyHandler; PART_NegativeButton.Click += negativeHandler; PART_AffirmativeButton.Click += affirmativeHandler; PART_FirstAuxiliaryButton.Click += firstAuxHandler; PART_SecondAuxiliaryButton.Click += secondAuxHandler; return(tcs.Task); }
internal Task <MessageDialogResult> WaitForButtonPressAsync() { Dispatcher.BeginInvoke(new Action(() => { this.Focus(); //kind of acts like a selective 'IsDefault' mechanism. switch (this.ButtonStyle) { case MessageDialogStyle.Affirmative: PART_AffirmativeButton.Focus(); break; case MessageDialogStyle.AffirmativeAndNegative: case MessageDialogStyle.AffirmativeAndNegativeAndDoubleAuxiliary: case MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary: PART_NegativeButton.Focus(); break; } })); TaskCompletionSource <MessageDialogResult> tcs = new TaskCompletionSource <MessageDialogResult>(); RoutedEventHandler negativeHandler = null; KeyEventHandler negativeKeyHandler = null; RoutedEventHandler affirmativeHandler = null; KeyEventHandler affirmativeKeyHandler = null; RoutedEventHandler firstAuxHandler = null; KeyEventHandler firstAuxKeyHandler = null; RoutedEventHandler secondAuxHandler = null; KeyEventHandler secondAuxKeyHandler = null; KeyEventHandler escapeKeyHandler = null; Action cleanUpHandlers = null; var cancellationTokenRegistration = DialogSettings.CancellationToken.Register(() => { cleanUpHandlers(); tcs.TrySetResult(ButtonStyle == MessageDialogStyle.Affirmative ? MessageDialogResult.Affirmative : MessageDialogResult.Negative); }); cleanUpHandlers = () => { PART_NegativeButton.Click -= negativeHandler; PART_AffirmativeButton.Click -= affirmativeHandler; PART_FirstAuxiliaryButton.Click -= firstAuxHandler; PART_SecondAuxiliaryButton.Click -= secondAuxHandler; PART_NegativeButton.KeyDown -= negativeKeyHandler; PART_AffirmativeButton.KeyDown -= affirmativeKeyHandler; PART_FirstAuxiliaryButton.KeyDown -= firstAuxKeyHandler; PART_SecondAuxiliaryButton.KeyDown -= secondAuxKeyHandler; KeyDown -= escapeKeyHandler; cancellationTokenRegistration.Dispose(); }; negativeKeyHandler = (sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Negative); } }; affirmativeKeyHandler = (sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Affirmative); } }; firstAuxKeyHandler = (sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.FirstAuxiliary); } }; secondAuxKeyHandler = (sender, e) => { if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.SecondAuxiliary); } }; negativeHandler = (sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Negative); e.Handled = true; }; affirmativeHandler = (sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Affirmative); e.Handled = true; }; firstAuxHandler = (sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.FirstAuxiliary); e.Handled = true; }; secondAuxHandler = (sender, e) => { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.SecondAuxiliary); e.Handled = true; }; escapeKeyHandler = (sender, e) => { if (e.Key == Key.Escape) { cleanUpHandlers(); tcs.TrySetResult(ButtonStyle == MessageDialogStyle.Affirmative ? MessageDialogResult.Affirmative : MessageDialogResult.Negative); } else if (e.Key == Key.Enter) { cleanUpHandlers(); tcs.TrySetResult(MessageDialogResult.Affirmative); } }; PART_NegativeButton.KeyDown += negativeKeyHandler; PART_AffirmativeButton.KeyDown += affirmativeKeyHandler; PART_FirstAuxiliaryButton.KeyDown += firstAuxKeyHandler; PART_SecondAuxiliaryButton.KeyDown += secondAuxKeyHandler; PART_NegativeButton.Click += negativeHandler; PART_AffirmativeButton.Click += affirmativeHandler; PART_FirstAuxiliaryButton.Click += firstAuxHandler; PART_SecondAuxiliaryButton.Click += secondAuxHandler; KeyDown += escapeKeyHandler; return(tcs.Task); }