【问题标题】:Set focus to another element with default button event?使用默认按钮事件将焦点设置到另一个元素?
【发布时间】:2015-07-23 00:23:32
【问题描述】:

我尝试了以下方法:

<Button IsDefault="True" Content="Process Test File" 
        FocusManager.FocusedElement="{Binding ElementName=txtClientId}" 
        Command="{Binding ProcessFileCommand, UpdateSourceTrigger=PropertyChanged}">
</Button>

我将按钮设置为默认值。因此,当用户按下回车键时,它会处理命令,但不会像要求的那样设置焦点。但是,当用鼠标单击时,它会设置焦点。我相信一定有一种简单的方法可以让设置焦点也与默认操作一起使用。

【问题讨论】:

  • 通常,FocusManager.FocusedElement 仅在加载控件时才被“触发”...事实上,当单击按钮时它也在做某事令人费解,但我当然不会想到它在任何其他情况下工作。

标签: wpf mvvm


【解决方案1】:

在按钮的Click 事件中进行聚焦。当你按下 Enter 时它也会被调用。

<Button IsDefault="True" Content="Process Test File" 
        Command="{Binding ProcessFileCommand, UpdateSourceTrigger=PropertyChanged}"
        Click="Button_Click">
</Button>

然后,在代码隐藏中:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Keyboard.Focus(txtClientId);
}

【讨论】:

  • 我希望有办法解决它。我想这不会完全破坏 MVVM,因为我没有将代码用于任何 VM 或数据。
  • 确实不会破坏 MVVM,而且我能想到的唯一无代码隐藏解决方案涉及创建具有附加属性的行为以及所有这些......这感觉有点像为此矫枉过正(但如果您对此感兴趣,我们可以研究一下)
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
相关资源
最近更新 更多