如何在堆栈面板中滚动数据网格?

How to scroll the datagrid in stackpanel?

我想在长度超过 stackpanel 时滚动 datagrid,所以我尝试了这个:

<StackPanel Orientation="Horizontal">                         
   <ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
       <DataGrid Name="dgConfig" VerticalAlignment="Stretch" AutoGenerateColumns="False">
             <DataGrid.Columns>
              ...
             </DataGrid.Columns>
       </DataGrid>
   </ScrollViewer>                                
</StackPanel>

但这行不通,我在这个网站上搜索过,但没有找到任何可用的解决方案。那么我应该如何解决这个问题?谢谢!

尝试将 VerticalScrollBarVisibility="Auto"、ScrollViewer.CanContentScroll="True" 添加到数据网格 属性.

ScrollViewersStackPanels 不能很好地协同工作,因为如果 Orientation StackPanel 测量其具有无限水平 space 的子元素 属性设置为Horizontal和无限垂直space如果设置为Vertical.

因此您要么必须为 StackPanel:

指定高度
<StackPanel Orientation="Horizontal" Height="100">

如果你不这样做,它的高度将是无限的,这就是你看不到滚动条的原因。

另一个更好的选择是摆脱 StackPanel 并使用另一个 Panel,它不使用无限 space 测量其子元素。

DataGrid 有自己的内置 ScrollViewer,因此您不需要自己将它放在 ScrollViewer 元素中。去掉 StackPanel(s) 和 ScrollViewer:

<DataGrid Name="dgConfig" VerticalAlignment="Stretch" AutoGenerateColumns="False"
                          VerticalScrollBarVisibility="Auto">
    <DataGrid.Columns>
        ...
    </DataGrid.Columns>
</DataGrid>

DockPanel 而不是 StackPanel 适合我。