WPF DataGrid垂直大小

时间:2010-06-19 21:11:15

标签: wpf xaml wpfdatagrid contentcontrol wpf-4.0

我想将一个DataGrid放在HeaderedContentControl中,但DataGrid没有得到一个垂直的Scrollbar。它看起来大小可以同时容纳所有行,底部从视图中消失。

如果我将相同的DataGrid放在Border elelemnt中,我会得到我想要的行为。

我把它简化为这个最小的例子:

<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

1 个答案:

答案 0 :(得分:6)

您看到此行为是因为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>