4

我想在 HeaderedContentControl 中放置一个 DataGrid,但 DataGrid 没有获得垂直滚动条。它的大小似乎可以一次容纳所有行,底部从视图中消失。

如果我将相同的 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 让它工作
  • 这个问题与这个问题有关,我认为我已经把它扩大了一点,并且有一个更好的答案。
  • 在 DataGrid 周围使用 ScrollViewer 不是解决方案,因为它会将标题滚动到视线之外。
  • 我正在使用 WPF4
4

1 回答 1

6

您看到这种行为是因为默认模板HeaderedContentControl使用 aStackPanel来显示其内容。由于StackPanel采用其子级的大小,因此DataGrid扩展其高度以使其每个项目都显示在屏幕上而没有滚动条。然后由于HeaderedContentControl.

将模板更改为使用 aGrid或 aDockPanel可解决此问题:

<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>
于 2010-06-19T21:41:41.897 回答