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; } }; } }