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のEventhandlerをRibbonWinに追加し、フォーカスをnullに設定するだけです...

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