0

嗨,我是 wpf 中的“非常”初学者,我正在尝试使菜单项“清除”,它应该清除焦点文本框中的文本,实际上我找不到像这样的工作的内置命令(复制,粘贴,剪切..等)

是否有内置的,或者我是否必须制作自定义路由命令,如果是这样,我尝试过但失败了,需要想法

我已经制定了 ClearCommandExecuted 逻辑,但问题在于“CanExecute”我试图在那里访问 Keyboard.FocusedElement,但失败了,因为当它被点击时,焦点元素是它自己的菜单项!!!!

请帮忙谢谢

4

2 回答 2

1

您需要使用传递给 CanExecuteQuery 的参数之一:

    private void ClearCommandBindingCanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        // e.Source is the element that is active,
        if (e.Source is TextBox) // and whatever other logic you need.
        {
            e.CanExecute = true;
            e.Handled = true;
        }
    }

    private void ClearCommandBindingExecuted(object sender, ExecutedRoutedEventArgs e)
    {
        var textBox = e.Source as TextBox;
        if (textBox != null)
        {
            textBox.Clear();
            e.Handled = true;
        } 
    }

我希望这足以让你朝着正确的方向前进......

于 2011-03-25T11:57:50.730 回答
0

尝试使用FocusManager类。当您的 TextBox 失去键盘焦点时,如果它在焦点范围内,它仍然具有逻辑焦点。WPF 中默认为焦点范围的类是 Window、MenuItem、ToolBar 和 ContextMenu。

所以使用它会给你结果 -

FocusManager.GetFocusedElement(winodw1); //Name of the window

有关更多详细信息,请阅读 - http://msdn.microsoft.com/en-us/library/aa969768.aspx

于 2011-03-25T08:41:32.207 回答