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

Bar*_*Lib 4 c# wpf datagrid scroll stackpanel

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

<StackPanel Orientation="Horizontal">                         
   <ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
       <DataGrid Name="dgConfig" VerticalAlignment="Stretch" AutoGenerateColumns="False">
             <DataGrid.Columns>
              ...
             </DataGrid.Columns>
       </DataGrid>
   </ScrollViewer>                                
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我在此网络上搜索并未能找到任何可用的解决方案。那么我应该如何解决这个问题?谢谢!

mm8*_*mm8 5

ScrollViewers并且StackPanels不能很好地协同工作,因为StackPanel如果 a 的Orientation属性设置为Horizontal,则使用无限水平空间测量其子元素,如果设置为则测量其具有无限垂直空间Vertical

因此,您必须为 指定高度StackPanel

<StackPanel Orientation="Horizontal" Height="100">
Run Code Online (Sandbox Code Playgroud)

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

另一个更好的选择是摆脱StackPanel并使用另一个Panel不使用无限空间测量其子元素的方法。

DataGrid有自己ScrollViewer内置的,所以你不必把它放在里面ScrollViewer元素自己。去掉StackPanel(s) 和ScrollViewer:

<DataGrid Name="dgConfig" VerticalAlignment="Stretch" AutoGenerateColumns="False"
                          VerticalScrollBarVisibility="Auto">
    <DataGrid.Columns>
        ...
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)


小智 5

DockPanel 而不是 StackPanel 对我有用。