2012-02-16 4 views
1

동료와 내가 작업하고있는 응용 프로그램의 GUI 작업을하고 있습니다. 나를 괴롭 히고있는 GUI 버그가 있으며 해결 방법을 찾을 수 없었습니다.부모의 높이를 자녀의 높이로 조정하는 방법은 무엇입니까?

제 GUI에는 그리드가 있습니다. 한 열에는 제가 누를 수있는 아래쪽 화살표 이미지가 있습니다. 화살표를 클릭하면 추가 정보가 확장됩니다. 추가 정보를 위해 RowDetailsTemplate을 사용했습니다. 다시 클릭하면 추가 정보가 사라집니다. Mouse_Down 이벤트를 사용하여 행 디테일의 가시성을 표시에서 축소로 변경하고 그 반대의 경우이를 변경합니다.

문제는 추가 정보를 접은 후에도 그리드의 크기가 계속 확장되어 추가 정보에 적합하다는 것입니다. 그러나 추가 정보의 가시성이 이미 축소되도록 설정되었으므로 그리드가 원래의 높이로 다시 변경되지 않는 이유는 무엇입니까? 데이터 그란 트의 높이를 그 크기만큼 어떻게 조절할 수 있습니까?

편집 :

<DataGrid Grid.Row="1" ItemsSource="{Binding ReadUnits}" BorderThickness="0" Name="dataGrid" RowDetailsVisibilityMode="Collapsed" HeadersVisibility="Column" GridLinesVisibility="Horizontal" VerticalScrollBarVisibility="Disabled" > 

이 이미지는 클릭 할 수있는 코드 :

이 원래 붕괴에 rowdetails을 설정 내 gridrow입니다. 행이이 데이터 템플릿을 상속합니다. 마우스 다운 이벤트를 만들 수 있습니다.

<DataGridTemplateColumn Header="" Width="30"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Name="navigationImage" Source=".../expand.png" Width="16" Height="16" MouseDown="navigationImage_MouseDown" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

여기가 이벤트의 위치입니다. 이렇게하면 rowdetails의 가시성이 설정됩니다.

private void navigationImage_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     FrameworkElement frameworkElement = (FrameworkElement)sender; 
     Image image = (Image)sender; 

     DataGridRow dataGridRow = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromItem(frameworkElement.DataContext); 
     if (dataGridRow.DetailsVisibility == Visibility.Collapsed) 
     { 
      dataGridRow.DetailsVisibility = Visibility.Visible; 
      BitmapImage icon = new BitmapImage(new Uri(".../collapse.png")); 
      image.Source = icon; 
     } 
     else 
     { 
      dataGridRow.DetailsVisibility = Visibility.Collapsed; 
      BitmapImage icon = new BitmapImage(new Uri(".../expand.png")); 
      image.Source = icon; 
     } 
    } 
+0

문제를 보여주는 샘플 코드를 게시하면 도움이됩니다. – Phil

+0

@ Phil, 문제의 코드를 추가했습니다. – Jay

+0

간단한 RowDetailsTemplate을 사용하면 코드가 저에게 효과적입니다. 간단한 템플릿으로 시도하고 그 템플릿이 작동하는지 확인하십시오. .NET 4를 사용하고 있습니다. 그렇습니까? – Phil

답변

0

"추가 정보"가있는 그리드를 호스팅하기 위해 만든 행 높이와 행에 따라 다릅니다. 당신의 행 정의에 .. "자동"으로이 같은

뭔가 높이를 제공하려고 ...

<RowDefinition Height="Auto"></RowDefinition> 
0

을 그래서 무력을 통해 내 문제를 해결하기 위해 노력하고 내가하기로 결정 최적의보다 보이는 코드를 사용 후 시도하고 좀 더 웹을 검색하고 내 문제 해결이 대답에 온 : http://social.msdn.microsoft.com/Forums/da-DK/wpf/thread/a0e7aea8-e9ad-441f-a775-1178aab75fb0

나는 전혀 관계가없는 설정을 설정하여 문제를 해결 한 듯합니다.

내 자식 그리드에서 ScrollViewer.CanContentScroll을 True로 설정했습니다. 일단 모든 하위 그리드에서 거짓으로 설정하면 마술처럼 보였습니다 . 이제 행 세부 정보를 접을 때 행을 적절하게 크기를 조정합니다. 당신이 나를 도울 수 있다면보고 싶은 한 가지는 을 결정하는 것이 어떻게이 문제를 해결했는지 설명합니다. 무슨 일이 있었 믿는 것을

내가 드롭 다운을 확장 할 때 ScrollViewer에이 일을하고 있지만, ScrollViewer에 그냥 눈에 보이지 않는했지만 여전히와 아이가 더 큰 성장하면서 부모 그리드를 확대하고있다. 스크롤 뷰어를 사용하지 않도록 설정하면 문제가 사라집니다.

관련 문제