2010-06-19 44 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