2011-10-20 5 views
0

WPFToolKit DataGrid을 사용하여 데이터를 표시하고 있습니다. 내 사용의 경우Wpf DataGrid의 포커스 문제

  1. 사용자가 셀을 클릭하고 값을 입력 (I 트랩을 이벤트를하고 TextBox에 포커스를 설정)
  2. 프레스는 다음에
  3. 값이 최선을 다하고 있습니다
  4. 초점 이동을 입력 셀

사용자가 셀을 클릭하지 않는 한 (DataGridCell)에 값을 입력 할 수 없습니다. TextBox은 다양한 컨트롤 (예 : NumericUpDown, Calendar 등)의 일부일 수 있습니다.

이 문제가 엑셀과 유사하지만 다양한 다른 래퍼 사용자 컨트롤로서 기본이 TextBox에 포커스를 이동 할 수 있습니다 아니다 거기 DataGridCell (DataGridCell 같은 것이 UpDown 컨트롤이 포함 MatrixCell을 포함 MatrixCellContainer을 포함)에

모든 포인터가 정말 도움이 될 것입니다.

업데이트 :

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

을하지만 이것을 달성하기 위해 더 나은 방법이 될 것입니다 알고

이 같은 DataGridCell_Selected 이벤트를 처리하여 내가 찾던 달성 할 수있다!

답변

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에는 논리적 포커스와 키보드 포커스의 두 가지 버전이 있습니다. Logical Focus 만 설정하는 myDataGridCell.Focus()을 사용하고있는 것으로 의심됩니다.

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

데이터 그리드의 그것의 기본 동작에 Enter 키에 초점을 이동 (나는 비록 확실하지 않다). DataGridCell_Selected 이벤트 처리기에서이 내용을 검사했으며 셀에 대해 IsFocused 및 IsKeyboardFocused가 모두 true로 설정됩니다. – akjoshi