예제 #1
0
        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;
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }