2015-09-17 29 views
0

簡單的問題與迄今尚未解答的答案。我們的窗口上有一個支持多選的WPF DataGrid。假設它有十個項目,並且你有六到十個項目被選中。如果您遠離控件,當控件再次獲得焦點時,第一個項目將被聚焦但未被選中。選擇仍然在項目六到十。這對我們來說更糟,因爲我們隱藏了焦點矩形,而不是依靠選擇高亮,這是用戶期望發生的事情。如何在WPF DataGrid獲得焦點時重新聚焦第一個選定的行?

我已經嘗試了對IsKeyboardFocusWithinChanged事件的響應,如圖所示,包括有和沒有調度程序,確定也許其他事情發生後更改它,但仍然無濟於事。

private void TestDataGrid_IsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    if(!(bool)e.NewValue) 
     return; 

    Dispatcher.Invoke(new Action(() => 
    { 
     var firstSelectedItem = VariableValuesDataGrid.SelectedItem; 

     if(firstSelectedItem != null) 
      VariableValuesDataGrid.CurrentItem = firstSelectedItem; 
    }), DispatcherPriority.Background); 
} 

任何想法如何解決這個問題?

+0

因此,如果數據網格獲得焦點,那麼您需要選擇並聚焦第一個項目,對嗎? – Tomtom

+0

關閉。我想要第一個選定的行被聚焦。 – MarqueIV

回答

1

我真的不熟悉WPF DataGrid,但我懷疑你必須處理舊窗體DataGridView的相同問題。

設置選定的行只會突出顯示,並且實際上不會將其聚焦。而CurrentRow屬性不幸的是私人的,但CurrentCell屬性不是,可以用來設置選擇。

myDataGrid.CurrentCell = myDataGrid.Rows[i].Cells[0]; 
myDataGrid.Rows[i].Selected = True; 
相關問題