Как я могу поднять DataGrid.LostFocus на RibbonButton.Click? - PullRequest
1 голос
/ 10 января 2011

В следующем коде используется панель инструментов и корректно вызывается 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), но безрезультатно.

Ответы [ 2 ]

1 голос
/ 15 апреля 2016

Хотя этому вопросу уже более 6 лет, я тоже хочу опубликовать свое решение: просто добавьте обработчик событий для PreviewMouseDown в RibbonWin и установите фокус на нуль ...

private void RibbonWin_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    FocusManager.SetFocusedElement(this, null);
}
1 голос
/ 18 февраля 2011

Не нравится из-за необходимости кода позади, но в отсутствие каких-либо других ответов;

<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);
}
...