2011-10-20 120 views
0

我使用WPFToolKit DataGrid來顯示數據;在我的用例Wpf DataGrid的焦點問題

  1. 用戶點擊一個小區和輸入一個值(I捕獲事件並設置焦點到TextBox
  2. 壓力機輸入
  3. 值被提交
  4. 焦點轉移到下一頁細胞

現在,用戶無法進入在TextBox任何值(在DataGridCell),除非他點擊單元格。 TextBox可以是各種控件的一部分(如NumericUpDownCalendar等)。

這種行爲類似於Excel的,但我不能將焦點其他各種包裝用戶控件轉移到底層TextBox有沒有在DataGridCell(像DataGridCell包含MatrixCellContainer,其中包含MatrixCell,其中包含UpDown控制)

任何指針都會非常有幫助。

更新:

我能達到什麼我正在尋找通過處理DataGridCell_Selected事件是這樣的:

private void DataGridCell_Selected(object sender, RoutedEventArgs e) 
{ 
     Microsoft.Windows.Controls.DataGridCell dataGridCell = 
       sender as Microsoft.Windows.Controls.DataGridCell; 

    // ToDo: This is a very bad hack; 
    // should be replaced by some proper technique 
    if (dataGridCell != null) 
    { 
     NumericUpDownBase<int>[] IntUpDownControls = 
      dataGridCell.GetChildrenOfType<NumericUpDownBase<int>>(); 
     if (IntUpDownControls.Count() != 0) 
     { 
      IntUpDownControls[0].Focus(); 
      //Keyboard.Focus(IntUpDownControls[0]); 
     } 
    else 
    { 
     NumericUpDownBase<double>[] DblUpDownControls = 
       dataGridCell.GetChildrenOfType<NumericUpDownBase<Double>>(); 
     if (DblUpDownControls.Count() != 0) 
     { 
       DblUpDownControls[0].Focus(); 
       //Keyboard.Focus(DblUpDownControls[0]); 
      } 
    } 
    } 
} 

但我知道,會有更好的方式來實現這一目標!

回答

0

最後,我這個解決 -

private void HandleCellSelected(object sender, RoutedEventArgs e) 
{ 
    DataGridCell dataGridCell = sender as DataGridCell; 
    if (dataGridCell != null) 
    { 
     TextBox[] textboxcontrols = dataGridCell.GetChildrenOfType<TextBox>(); 
     if (textboxcontrols.Count() != 0) 
     { 
      textboxcontrols[0].Focus(); 
     } 
    } 
} 

還在尋找一個更好的辦法,但...

2

你如何將焦點設置到下一個單元?

WPF有兩個版本的焦點,邏輯焦點和鍵盤焦點。我懷疑你正在使用myDataGridCell.Focus(),它只設置邏輯焦點。

myDataGridCell.Focus();   // Sets Logical Focus 
Keyboard.Focus(myDataGridCell); // Sets Keyboard Focus 
+0

其實我不是將焦點設置在代碼的任何地方,它的DataGrid的默認行爲將焦點移到Enter鍵上(我不確定)。我也在DataGridCell_Selected事件處理程序中檢查了這一點,併爲單元格實現了IsFocused和IsKeyboardFocused。 – akjoshi