【问题标题】:How to control Grid Height?如何控制网格高度?
【发布时间】:2012-08-07 07:39:59
【问题描述】:

我有一个包含 2 个子控件的网格。我有一个简单的堆栈面板和一个将驻留在网格中的 ListBox:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="5" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <ListBox Name="lstGroups" Grid.Row="0" />
        <StackPanel Grid.Row="2" />
<Grid>

问题是我的 ListBox 渲染超出了分配给网格的可视屏幕区域。如何确保我的 ListBox 占用了可用空间,但它不会渲染到我需要垂直滚动条才能看到所有内容的第二行?

【问题讨论】:

  • ListBox 有最小尺寸吗?样式可能是设置之一。否则,您的代码应该阻止 ListBox 大于 Grid.Height - StackPanel.Height - 5。我假设您打算将 StackPanel 放在第 2 行而不是第 1 行。
  • 不,上面的布局是正确的。没有最小值/最大值 - 只有您在此处看到的 xaml。我想要的是将 listBox 包含在第 0 行的查看区域中——问题是它超出了可视区域,这意味着我必须添加一个滚动条并且我不需要任何滚动条。
  • 您有三个行定义 - 它们各自的用途是什么?我猜“*”是针对 ListBox 的。您的意思是 StackPanel 在第 2 行而不是第 1 行?
  • 是的,抱歉,listBox 在第 0 行,水平 stackPanel 在第 2 行

标签: wpf grid height sizing


【解决方案1】:

您可能应该为此使用 DockPanel。您也可以通过编程方式设置列表框的高度,但这不是一种非常干净的方式。

<Window x:Class="MobilWPF.Windows.testWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="testWindow" Height="300" Width="300">
    <DockPanel>
        <StackPanel DockPanel.Dock="Bottom" >
            <TextBlock Text="blah"/>
        </StackPanel>
        <ListBox Name="lstGroups"  />
    </DockPanel>
</Window>


namespace MobilWPF.Windows
{
    /// <summary>
    /// Interaction logic for testWindow.xaml
    /// </summary>
    public partial class testWindow : Window
    {
        public testWindow()
        {
            InitializeComponent();

            for (int i = 0; i < 200; i++)
            {
                lstGroups.Items.Add(i.ToString()); 
            }
        }
    }
}

【讨论】:

  • 我在使用 DockPanel 时得到相同的行为
  • @MickeySixx,我更新了我的答案并对其进行了测试。唯一的区别是我的窗口有一个固定的高度和宽度。所以我猜你发布的上面的控件之一的高度是无限的。
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 2011-10-06
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2019-04-24
相关资源
最近更新 更多