如何在RibbonButton.Click上引发DataGrid.LostFocus?

时间:2011-01-10 06:42:14

标签: wpf datagrid ribbon focusmanager

以下代码使用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 ... />

如何使用功能区提升此事件?我试过通过其他级别(Ribbon,RibbonTab,RibbonButton)移动IsFocusScope无济于事。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

尽管这个问题超过6年,我也想发布我的解决方案: 只需将PreviewMouseDown的Eventhandler添加到RibbonWin并将焦点设置为null ...

private void RibbonWin_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    FocusManager.SetFocusedElement(this, null);
}