无法获得活动的垂直滚动条

时间:2015-10-17 21:00:03

标签: wpf xaml datagrid scrollbar

我已经阅读了一些处理此问题的帖子,但我无法在我的要求下使用此功能。在我如何计算或者我错过了一些关键细节时可能存在一些逻辑故障,但我看不到它。

我得到的是一个滚动条,但似乎不活跃。我的猜测是,由于标记,网格以其整体呈现,使得滚动感觉不需要。我怎么能让它感觉不舒服?

我希望创建一个显示相当长的数据网格的窗口:

  1. 高度固定
  2. 以宽度拟合内容
  3. 无法调整大小
  4. XAML

    <Window ...
            SizeToContent="Width"
            Height="600"
            ResizeMode="NoResize">
      <StackPanel>
        <StackPanel Orientation="Horizontal">
          <Button Content="Aaa" Click="Aaa_OnClick" />
          <Button Content="Bbb" Click="Bbb_OnClick" />
        </StackPanel>
        <DataGrid ItemsSource="{Binding Things}"
                  VerticalScrollBarVisibility="Visible"
                  AutoGenerateColumns="False">
          <DataGrid.Columns>
              <DataGridTextColumn Header="Id"
                                  Width="30"
                                  Binding="{Binding Path=Id}" />
              <DataGridTextColumn Header="Name"
                                  Width="150"
                                  Binding="{Binding Path=Name}" />
            </DataGrid.Columns>
          </DataGrid>
      </StackPanel>
    </Window>
    

    我想念什么?

1 个答案:

答案 0 :(得分:4)

这里的问题是您使用StackPanel来包裹DataGridStackPanel会一直增长,直到它可以包含整个DataGrid,因此在这种情况下,DataGrid的垂直滚动条设置为可见,但实际上它的高度已经足够扩展,因此没有滚动条是需要出现。如果您将滚动条可见性设置为Auto,则会看到它永远不会出现。

您应该使用Grid布局,例如:

<Grid>
   <Grid.RowDefinitions>
       <RowDefinition Height="Auto"/>
       <RowDefinition/>
   </Grid.RowDefinitions>
   <StackPanel Orientation="Horizontal">
     <Button Content="Aaa" Click="Aaa_OnClick" />
     <Button Content="Bbb" Click="Bbb_OnClick" />
   </StackPanel>
   <DataGrid ItemsSource="{Binding Things}"
          VerticalScrollBarVisibility="Visible"
          AutoGenerateColumns="False" Grid.Row="1">     
       <!-- ... -->
   </DataGrid>
</Grid>

或者如果你想坚持StackPanel,你需要将ScrollViewer包装在外面,如下所示:

<ScrollViewer VerticalScrollBarVisibility="Visible">
   <StackPanel>
     <StackPanel Orientation="Horizontal">
       <Button Content="Aaa" Click="Aaa_OnClick" />
       <Button Content="Bbb" Click="Bbb_OnClick" />
     </StackPanel>
     <DataGrid ItemsSource="{Binding Things}"              
          AutoGenerateColumns="False"> 
       <!-- ... -->        
     </DataGrid>
  </StackPanel>
</ScrollViewer>