首页 > 解决方案 > 如何使分配给按钮的命令的 RoutedUICommand.OnCanExecute 依赖于 Keyboard.FocusedElement?

问题描述

标签: c#wpfbindingrouted-commands

解决方案


如果您不需要将焦点放在测试按钮上,我只需在 btnTest1 上设置 Focusable="False"。

如果您仍然希望按钮可聚焦,一个想法可能是不使用 Keyboard.FocusedElement 而是使用FocusManager.GetFocusedElement,如下所示:

public class MyDataGridCellCommand : RoutedUICommand
{
    public MyDataGridCellCommand()
    {
        this.InputGestures.Add(new KeyGesture(Key.F1));
        this.Text = "Process selected cell";

    }

    public void OnExecuted(object sender, ExecutedRoutedEventArgs e)
    {
        if (FocusManager.GetFocusedElement(sender as DependencyObject) is DataGridCell) {
            //Process selected cell...
        }
    }

    public void OnCanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = (FocusManager.GetFocusedElement(sender as DependencyObject) is DataGridCell);
    }
}

推荐阅读