2011-01-10 3 views
1

В следующем коде используется ToolBar и корректно вызывает DataGrid.LostFocus (там, совершая любые незавершенные изменения строк перед выполнением команды);Как я могу увеличить DataGrid.LostFocus на RibbonButton.Click?

<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) безрезультатно.

ответ

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

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

private void RibbonWin_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
{ 
    FocusManager.SetFocusedElement(this, null); 
} 
Смежные вопросы