动态添加控件时不要调整网格大小

问题描述

我有一个网格,其列大小设置为 * 以在调整窗口大小时自动调整其大小。我在网格内有一个堆栈面板。但是,当我向其添加用户控件时,我不希望它调整大小,我只想显示一个滚动条,我尝试了以下操作,但似乎不起作用:

<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 需要更多空间来显示其内容时,内容将是可滚动的,并且滚动条将出现。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...