0

我有一个程序,其中一个按钮只有在相应的 userControl 具有焦点时才应该处于活动状态。

我正在使用 MVVM light,并获得了一个实现 ICommand 接口的命令。

我曾尝试使用 Keyboard.FocusedElement,但这没有返回任何内容。

这是命令的代码(请注意,它现在只是返回 true 以使其正常工作,这当然是我要修复的问题):

class AddItemToNodeCommand<T> : ICommand
{
    public bool CanExecute(object parameter)
    {
        Debug.WriteLine("fokuselement er: " + Keyboard.FocusedElement);    
       return true;
      //  throw new NotImplementedException();
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        Debug.WriteLine("Parameter er: " + parameter);
        Debug.WriteLine("fokuselement er: " + Keyboard.FocusedElement);

        //throw new NotImplementedException();
    }
}

从视图模型:

public ICommand AddItemToNodeCommand { get; private set; }
AddItemToNodeCommand = new AddItemToNodeCommand<object>();

最后是一些 XAML:

<RibbonButton SmallImageSource="../Images/whatever.png" Label="Attribute" Command="{Binding AddItemToNodeCommand}" CommandParameter="Attribute"/>

我还没有发布 userControl 的 xaml,但想法是当 userControl 有焦点时,CanExecute 应该是真的。我认为它可以与 Keyboard.FokusedElement 一起使用,但我错了。我能做些什么?

先感谢您。

4

1 回答 1

0

似乎这Keyboard.FocusedElement有点浮夸。

在这里查看涉及附加行为和覆盖Keyboard.GotKeyboardFocusEvent. 我试过了,它似乎工作。

否则,您可以绑定到IsKeyboardFocusedor IsKeyboardFocusWithin。只需将其放入您的 xaml 中即可作为示例:

<StackPanel>
<TextBox Name="test_txtbx" >Hullo</TextBox>
    <TextBox Name="test_txtbx_2">Hullo 2</TextBox>
    <Label Content="{Binding ElementName=test_txtbx, Path=IsKeyboardFocused}"></Label>
    <Label Content="{Binding ElementName=test_txtbx_2,Path=IsKeyboardFocusWithin }"></Label>
    <Button Click="TestClick">test me </Button>
</StackPanel>

标签显示匹配的文本框是否具有焦点。

(这是一篇旧文章,它说焦点也很有趣.. 不知道是否仍然相关)。

于 2013-10-24T07:37:54.547 回答