2011-10-25 4 views
0

충돌하는 요구 사항이있는 것 같습니다. 첫 번째 열로 확인란이있는 DataGrid가 있습니다. 사용자는 더블 클릭이 아닌 한 번의 클릭으로 선택란을 선택하기를 원합니다. 나는 DataGridTemplateColumn이 같은 체크 박스를 사용하여 그렇게 할 수 있었다 :DataGrid에서 ScrollIntoView를 사용하여 체크 상자가 변경된 경우

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

또한 사용자들이 행을 지정할 수있는 제어 (행 수백있을 수 있습니다). 보기에없는 행을 지정하면보기로 스크롤하려고합니다. 나는 손상되어 DataGrid_SelectionChanged 이벤트에 대한 코드 숨김 이벤트 처리기를 추가했습니다. 원래 ScrollIntoView 명령을 사용하고 있었지만 화면 밖의 행은 강조 표시되었지만 그리드가 스크롤되지 않았습니다. 그런 다음 포커스 명령을 추가하고 행을보기로 스크롤 할 수있었습니다. 이제 이벤트 핸들러는 다음과 같습니다 : 지금은 다시 원래의 문제에있어

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    DataGrid dg = (DataGrid)sender; 
    if (dg.SelectedItem == null) return; 
    dg.ScrollIntoView(dg.SelectedItem); 
    dg.SelectedItem.Focus(); 
} 

, 행 스크롤 당신은을 통해로 이동하지 않는 것을 (보기에 있지만 다른 행에 체크 박스를 확인하는 행 컨트롤로 이동) 두 번 클릭해야합니다. 아무도 두 번 클릭하여 수동으로 이동 행을 일으키는 원인을 알고 계십니까?

+1

'dg.SelectedItem.Focus()'메소드를 얻을 수 없었습니다. 당신이 갖고있는 코드가 맞습니까? 어쨌든, 그것 없이는 selectedItem을 view로 스크롤하기 위해 dataGrid를 얻을 수 있었고 (다른 컨트롤에서는 selectedItem을 설정했다고 가정 함) 단일 클릭 체크 박스 인 dataTemplate은 다른 모든 행에서도 매력처럼 작동했습니다 ... 코드 예제에서 누락 된 것이 있습니까? – philt5252

+0

당신의 권리는, 내가 복사하고 붙여 넣은 줄 알았지 만, 나는 너무 많은 것들을 시도하고 있었고 (조금 좌절감을 느꼈습니다.) 나는 더 이상 문제를 일으킨 것이 무엇인지 확신 할 수 없지만 대답을 찾았습니다. – Tod

+0

잘 작동하고 있습니다. P – philt5252

답변

0

글쎄, 나는 세포에 초점을 맞추기 위해 접선 관계에있는 몇 가지 게시물에서 영감을 얻은 다음 코드를 사용했다. ScrollIntoView가 작동하지 않는 이유에 대한 단서가 없거나 마지막 세 줄을 수행하는 것이 확인란을 비활성화하지 않고보기로 스크롤 할 줄을 얻을 수있는 한 가지 방법이었습니다.

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    DataGrid dg = (DataGrid)sender; 
    if (dg.SelectedItem == null) return; 
    dg.ScrollIntoView(dg.SelectedItem); 

    DataGridRow dg_row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(dg.SelectedItem); 
    if (dg_row == null) return; 
    dg_row.Focus(); 
    } 
관련 문제