WPF DataGrid垂直大小

Hen*_*man 4 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>
Run Code Online (Sandbox Code Playgroud)

几点说明:

  • 我无法使用HeaderedContentControl.VerticalContentAlignment使其工作
  • 这个问题涉及到这个问题,但我想我已经扩大了它一下,有一个更好的答案.
  • 在DataGrid周围使用ScrollViewer不是一个解决方案,因为它将标题滚动到视线之外.
  • 我正在使用WPF4

Jul*_*ain 6

您正在看到此行为,因为默认模板HeaderedContentControl是使用a 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>
Run Code Online (Sandbox Code Playgroud)