代码之家  ›  专栏  ›  技术社区  ›  Henk Holterman

WPF数据网格垂直调整

  •  4
  • Henk Holterman  · 技术社区  · 14 年前

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

    如果我在Border元素中放置相同的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
    1 回复  |  直到 7 年前
        1
  •  6
  •   Julien Lebosquain    14 年前

    您看到此行为是因为 HeaderedContentControl 正在使用 StackPanel 显示其内容。自从 堆栈面板 考虑到它的孩子的大小 DataGrid 扩展其高度,使其每个项目都显示在屏幕上,而不显示滚动条。然后根据屏幕的大小对显示进行裁剪 标题内容控制 .

    Grid 或者 DockPanel 解决此问题:

    <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>