예제 #1
0
        private static void DefaultButtonChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var uiElement = d as UIElement;
            var button    = e.NewValue as Button;

            if (uiElement != null && button != null)
            {
                // when KeyDown event fires with Key.Enter, set focus to the default button
                // and set fireClickEvent to true
                uiElement.KeyDown += (sender, arg) =>
                {
                    if (arg.Key == Key.Enter && button.IsEnabled)
                    {
                        fireClickEvent = true;
                        button.Focus();
                    }
                };

                // when the GetFocus event fires for  the default button, invoke the click event
                // when fireClickEvent is true
                button.GotFocus += (s, argument) =>
                {
                    // if fireClickEvent is true, this event is trigger by
                    // the KeyDown event with Key.Enter from uiElement
                    if (fireClickEvent)
                    {
                        var peer = new ButtonAutomationPeer(button);
                        if (peer.IsEnabled())
                        {
                            var invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
                            if (invokeProv != null)
                            {
                                invokeProv.Invoke();
                            }
                        }
                        // set fireClickEvent back to false
                        fireClickEvent = false;
                    }
                };
            }
        }