2012-04-24 5 views
0

내가 맞을 때 DataGrid에서 다음 컨트롤로 포커스를 제거하는 방법 을 null로 입력하십시오.WPF MVVM의 마지막 행에서 Enter 키를 누르면 DataGrid에서 포커스가 이동됩니까?

나는이 이벤트 당신의 데이터 그리드의 최대 키와 WPF MVVM

+0

내 마지막 편집을 참조하십시오 감사합니다 –

+0

사용자 정의 컨트롤을 만드는 경우 데이터 그리드에서 파생 된 사용자 정의 컨트롤에 문제가 없습니다. 여전히 xaml 코드의 데이터 표를 선택할 수 있습니다. 속성 탐색기에서 속성 탐색기를 찾을 수있는 속성 탐색기가 나타납니다. 이벤트 및 그 후 두 번 클릭하십시오 ... 그것은 뒤에 코드에서 이벤트를 만들 것입니다 –

+0

mvvm 이후 codebehind 사용하고 있지 않습니다. –

답변

2
private void dataGrid1_KeyUp(object sender, KeyEventArgs e) 
     { 
      DependencyObject dep = (DependencyObject)e.OriginalSource; 
      //here we find the Row is selected 
      //then we check is the row last row 

      while ((dep != null) && !(dep is DataGridRow) && !(dep is DataGridColumnHeader)) 
      { 
       dep = VisualTreeHelper.GetParent(dep); 
      } 

      if (dep == null) 
       return; 

      if (dep is DataGridRow) 
      { 
       DataGridRow row= dep as DataGridRow; 
       //untill here we find the selected row and here we check if it 
       //the last row our focus go to next control after datagrid 
       if (row.GetIndex() == dataGrid1.Items.Count - 1) 
      { 
       dataGrid1.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down)); 
       dataGrid1.UnselectAll(); 
      } 
      } 
     } 

세트를 사용하고 있습니다. System.Windows.Controls.Primitives를 사용하여이 참조를 사용하십시오. DataGrid 및 다른 컨트롤을 창에 배치하십시오. 마지막 행을 잡으면 다음 컨트롤로 포커스가 변경됩니다. 내가가 발생할 때이 때문에 의 당신 풍부한 마지막 행의 경우 (row.GetIndex() == dataGrid1.Items.Count - 1)

는 데이터 그리드를 사용합니다 .if 내가 선택 모드로 fullrowselect와 데이터 그리드를 사용 셀 선택 모드로 내게 남겨주세요.

+0

첫 번째 행에 도달하면 다음 컨트롤로 이동합니다. 하지만 여기서 내가 원하는 것은 null에 마지막 행과 두 번째 열에 도달했을 때 다음 컨트롤로 이동하려고 할 때입니다. –

+0

CodeBehind 파일이 없습니다. DataGrid에서 파생 된 CustomDataGrid를 만들고 있습니다. –

관련 문제