private static void OnApplyFixPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { EditModeSwitchButton button = obj as EditModeSwitchButton; if (button == null) { Debug.Fail("EditModeSwitchButtonKeyboardFix.ApplyFix fix can only be applied to EditModeSwitchButton instances."); return; } if (object.Equals(e.NewValue, true)) { // Instantiating this class will make itself hook into EditModeSwitchButton's events, // hence not be chewed up by garbage collector new EditModeSwitchButtonKeyboardFix(button); } }
private void OnEditModeSwitchButtonClick(object sender, RoutedEventArgs e) { if (_clickInitiatedByMouse) { return; } EditModeSwitchButton button = e.OriginalSource as EditModeSwitchButton; Fx.Assert(button != null, "Expected to see the EditModeSwitchButton at this point."); if (button == null) { return; } // At this point the click was initiated using the Invoke AutomationPeer pattern or // by using the keyboard. So, make sure that the EditModeSwitchButton.OnMouseDown // button still executes. // Invoke the appropriate command switch (button.TargetEditMode) { case PropertyContainerEditMode.Inline: PropertyValueEditorCommands.ShowInlineEditor.Execute(null, button); break; case PropertyContainerEditMode.ExtendedPopup: PropertyValueEditorCommands.ShowExtendedPopupEditor.Execute(null, button); break; case PropertyContainerEditMode.ExtendedPinned: PropertyValueEditorCommands.ShowExtendedPinnedEditor.Execute(null, button); break; case PropertyContainerEditMode.Dialog: PropertyValueEditorCommands.ShowDialogEditor.Execute(null, button); break; default: Debug.Fail(string.Format( CultureInfo.CurrentCulture, "EditModeSwitchButtonKeyboardFix does not yet support PropertyContainerEditMode '{0}'.", button.TargetEditMode.ToString())); break; } }
private EditModeSwitchButtonKeyboardFix(EditModeSwitchButton button) { button.Click += new RoutedEventHandler(OnEditModeSwitchButtonClick); button.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(OnEditModeSwitchButtonPreviewMouseLeftButtonUp); }