2010-06-19 45 views
3

我想將一個DataGrid放置在HeaderedContentControl中,但DataGrid沒有得到一個垂直的滾動條。它的大小似乎是一次保存所有行,底部從視圖中消失。WPF DataGrid垂直尺寸調整

如果我將相同的DataGrid放在邊界元素中,我會得到我想要的行爲。

我把它降低到這個最小例如:

<Grid> 
    <HeaderedContentControl Margin="10,10,10,161" > 
     <HeaderedContentControl.Header >test</HeaderedContentControl.Header> 

     <!-- I want it Here but then no Vertical Scroll--> 
     <DataGrid ItemsSource="{Binding Path=AllData}"      
        AutoGenerateColumns="True" /> 
    </HeaderedContentControl> 

    <Border Margin="10,169,10,10">         
     <!--Here it does scroll --> 
     <DataGrid ItemsSource="{Binding Path=AllData}" 
        AutoGenerateColumns="True" /> 
    </Border>      
</Grid> 

的幾個注意事項:

  • 我不能讓它使用HeaderedContentControl.VerticalContentAlignment
  • 這個問題與工作無關this question但我想我已經擴大了一點,並有更好的答案。
  • 在DataGrid周圍使用ScrollViewer不是一個解決方案,因爲它將標題滾動到視線之外。
  • 我使用WPF4

回答

5

你因爲HeaderedContentControl默認模板使用StackPanel以顯示其內容看到這種行爲。由於StackPanel取得了其子項的大小,因此DataGrid將擴展其高度以使其每個項目都顯示在屏幕上,而不顯示滾動條。然後由於HeaderedContentControl的大小,顯示會被裁剪。

更改使用GridDockPanel模板來解決這個問題:

<Style TargetType="{x:Type HeaderedContentControl}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type HeaderedContentControl}"> 
     <DockPanel> 
      <ContentPresenter DockPanel.Dock="Top" ContentSource="Header" /> 
      <ContentPresenter /> 
     </DockPanel> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+0

謝謝,我只是得到它的工作基於此。 – 2010-06-20 09:59:43