2010-12-07 4 views
0

두 번째 DataGrid를 rowdetailstemplate로 사용할 때 내 DataGrid에서 이상한 동작이 발생합니다. 기본 DataGrid는 내 항목 모음에 바인딩되며 세부 DataGrid는 항목에 포함 된 하위 항목 모음에 바인딩됩니다. 이제이 모든 것이 완벽하게 렌더링되었지만 SubItemsGrid의 셀을 직접 클릭하려면 먼저 SubItemsGrid가 포함 된 기본 그리드의 행의 첫 번째 셀을 선택합니다. 셀을 선택하려면 두 번 클릭해야합니다.RowDetailsTemplate 안에있는 WPF DataGrid의 셀 선택

다른 사람도이 질문에 답변 했습니까? 그렇다면 해결 방법이 있습니까?

은 (부분적으로) 내 마크 업입니다 :

<DataGrid x:Name="ItemGrid" ItemsSource="{Binding Path=Items}" AutoGenerateColumns="False" SelectionUnit="Cell" 
      RowDetailsVisibilityMode="Visible" CanUserResizeRows="False" AreRowDetailsFrozen="False" VerticalAlignment="Top" 
      CanUserAddRows="False" CanUserDeleteRows="False" VerticalScrollBarVisibility="Hidden"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Column1" Binding="{Binding Path=ID}" Width="350"/> 
     <DataGridTextColumn Header="Column2" Binding="{Binding Path=Name}" Width="80"/> 
     <DataGridTextColumn Header="Column3" Binding="{Binding Path=Description}" Width="80"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <DataGrid x:Name="SubItemsGrid" ItemsSource="{Binding Path=SubItems}" AutoGenerateColumns="False" 
         SelectionUnit="Cell" HeadersVisibility="None" Margin="50,0,0,0" VerticalAlignment="Top" CanUserAddRows="False" 
         CanUserResizeRows="False" CanUserDeleteRows="False" BorderThickness="0"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="Column1" Binding="{Binding Path=Name}" Width="300" /> 
        <DataGridTextColumn Header="Column2" Binding="{Binding Path=Description}" Width="80"/> 
        <!-- Etc.--> 

--- 편집 ---

좋아, 나는 SubItemsGrid에서 마우스 업 이벤트를 처리하기 위해 아이디어를 내놓았다

private void SubItemsGrid_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    DataGrid selectedGrid = sender as DataGrid; 
    if (selectedGrid != null) 
    { 
     selectedGrid.Focus() 
    } 
} 

디버깅은 '초점'방법은 바로 그리드에 호출되는 것을 보여 주지만, 나는 어떤 시각적 인 결과를 얻고 있지 않다 : 다음과 같이 코드에서 SubItemsGrid에 포커스를 설정합니다. 그러나 나는 그 해결책에 매우 가깝다고 느끼고 있습니다. 누군가?

답변

0

이 문제는 SubItemsGrid의 'SelectedCellsChanged'이벤트를 잡아내어 해결했습니다. 핸들러에서 이벤트를 발생시킨 그리드에서 'BeginEdit()'를 호출했습니다. 이것은 실제로 클릭 된 셀에 초점을 맞추지 만 셀을 편집 모드로 전환합니다. 그래서 CancelEdit()을 직접 호출 한 것입니다. 이렇게하면 셀에 포커스가 유지되지만 편집 모드에서는 포커스가 유지되지 않습니다.

private void SubItemsGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
{ 
    DataGrid selectedGrid = sender as DataGrid; 
    if (selectedGrid != null) 
    { 
     selectedGrid.BeginEdit(); 
     selectedGrid.CancelEdit(); 
    } 
} 
+0

첫 번째 클릭을 삼키는 것은 어린이 눈금이 아니더라도 본 적이있는 내용입니다. 또한 [이 sliverlight.net 스레드] (http://forums.silverlight.net/forums/p/208961/491280.aspx)에 댓글을 달았습니다. 나는 그것에 대한 일반적인 해결책을 아직 풀지 않았다. –

관련 문제