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

Kon*_*ten 1 wpf xaml datagrid scrollbar

我已经阅读了很多关于这个问题的帖子,但是我不能在我的要求使它正常工作。我的数字可能会出现逻辑故障,或者我错过了一些关键细节,但我看不到。

我得到的是一个滚动条,但它似乎没有激活。我的猜测是,由于存在标记,网格将整体呈现,从而使滚动画面变得不必要。我如何才能感到别样?

我希望创建一个显示较长数据网格的窗口,该网格是:

  1. 固定高度
  2. 使内容符合宽度
  3. 无法调整大小

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>
Run Code Online (Sandbox Code Playgroud)

我想念什么?

Kin*_*ing 5

这里的问题是您使用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>
Run Code Online (Sandbox Code Playgroud)

或者,如果您想坚持使用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>
Run Code Online (Sandbox Code Playgroud)