我的Silverlight页面中有以下网格作为LayoutRoot控件:
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
第二行的全部内容是通过数据绑定填充的数据网格,网格的总高度很大,可能是3000像素。我的理解是,通过这种方式进行行定义,第一行和第三行应具有相同的高度并始终保持可见(如页眉和页脚行),而第二行的大小应为总高度减去60而另一行行。但实际发生的是第二行占据了整个3000像素,没有显示垂直滚动条,并且将页脚行推过控件的底部。这就是Height =“Auto”应该做的事情,我想,不是Height =“*”应该做的事情。
我在这里缺少什么?谢谢!
更新:问题原因是我的网格位于嵌入主页的导航页面中,因为我接受了默认的Silverlight项目模板。这个主页面的布局允许通过将所有内容放在StackPanel中来扩展到内容。您似乎并不需要将Horiontal和Vertical对齐属性设置为Stretch。当我用网格替换StackPanel并将内部网格行高度设置为*时,它按预期工作。
答案 0 :(得分:1)
这一切都取决于托管网格的容器。如果容器没有任何限制,网格将调整大小以占用最大可用空间。有人必须设置限制,通常是最顶层的网格(LayoutRoot)。你只需要注意不要在其中一个级别上打破它。
答案 1 :(得分:1)
最顶层网格的默认行为是调整大小以适应内容,除非强制执行其他操作。
您需要将VerticalAlignment =“Stretch”HorizontalAlignment =“Stretch”添加到网格本身。这将使其延伸以适应Silverlight组件尺寸(例如100%的浏览器)。
行和列的基本计算如下:
*注意:如果网格本身不受约束,则高度和宽度会扩展以适合内容(如自动)。
嵌套容器的运行方式是Silverlight中最令人困惑的事情之一,但是一旦你得到了所有的问题,它就会非常有意义。