2011-01-10 53 views
1

下面的代碼使用一個工具欄和正確地使DataGrid.LostFocus(有通過執行該命令之前提交任何uncomitted行編輯);我怎麼能在RibbonButton.Click提高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無效。

回答

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歲,我要發佈我的解決方案過於: 只是爲了PreviewMouseDown添加事件處理程序到RibbonWin並將焦點設置爲null ...

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