1

以下代码使用 ToolBar 并正确导致 DataGrid.LostFocus (通过在执行命令之前提交任何未提交的行编辑);

<Toolbar FocusManager.IsFocusScope="False">
  <Button Command="{Binding CommandName}" />
</ToolBar>
<DataGrid ... />

但是,我现在正尝试使用功能区(oct10 版本)做同样的事情,但以下不会导致 DataGrid.LostFocus 被提升;

<Ribbon>
  <RibbonTab>
    <RibbonGroup FocusManager.IsFocusScope="False">
      <RibbonButton Command="{Binding CommandName}" />
    </RibbonGroup>
  </RibbonTab>
</Ribbon>
<DataGrid ... />

如何使用功能区引发此事件?我尝试将 IsFocusScope 移动到其他级别(Ribbon、RibbonTab、RibbonButton)无济于事。

4

2 回答 2

1

不喜欢这个,因为需要后面的代码,但没有任何其他答案;

<Ribbon>
  <RibbonTab>
    <RibbonGroup>
      <RibbonButton Command="{Binding CommandName}" Click="dropFocus" />
    </RibbonGroup>
  </RibbonTab>
</Ribbon>
<Control IsTabStop="False" Name="focusControl"/>
<DataGrid ... />

以及背后的代码;

private void dropFocus(object sender, RoutedEventArgs e)
{
  Keyboard.Focus(focusControl);
}
于 2011-02-18T07:02:53.013 回答
1

尽管这个问题已经超过 6 年了,但我也想发布我的解决方案:只需将 PreviewMouseDown 的事件处理程序添加到 RibbonWin 并将焦点设置为 null ...

private void RibbonWin_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    FocusManager.SetFocusedElement(this, null);
}
于 2016-04-15T06:03:54.063 回答