以下代码使用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无济于事。
答案 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);
}