问题描述
我有一个网格,其列大小设置为 *
以在调整窗口大小时自动调整其大小。我在网格内有一个堆栈面板。但是,当我向其添加用户控件时,我不希望它调整大小,我只想显示一个滚动条,我尝试了以下操作,但似乎不起作用:
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="*" MinWidth="690"/>
<ColumnDeFinition Width="Auto" MinWidth="170"/>
</Grid.ColumnDeFinitions>
<Grid.RowDeFinitions>
<RowDeFinition Height="Auto"/>
<RowDeFinition Height="*" MinHeight="221"/>
</Grid.RowDeFinitions>
<Grid Grid.Column="0"
Grid.Row="1"
Margin="10,5,10,0">
<ScrollViewer HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible">
<StackPanel x:Name="ServersListPanel"/>
</ScrollViewer>
</Grid>
解决方法
将 ScrollViewer 放在 DockPanel 中,移除 Grid 上的 MinWidth 和 MinHeight 约束,并将 ScrollBarVisibility 设置为“Auto”:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Column="0"
Grid.Row="1"
Margin="10,5,10,0">
<DockPanel>
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
DockPanel.Dock="Top">
<StackPanel x:Name="ServersListPanel" />
</ScrollViewer>
</DockPanel>
</Grid>
</Grid>
问题是因为 ScrollViewer 认为它具有无限大小,因为没有任何东西限制它的大小。设置 ScrollViewer 或其包含 ScrollViewer 的父控件之一的宽度/高度将限制 ScrollViewer 的大小,并且当其包含的 StackPanel 需要更多空间来显示其内容时,内容将是可滚动的,并且滚动条将出现。