我得到了一个ListView(包裹在一个ScrollViewer中),如果元素inseretd超过可见区域,它会自行调整大小,直到达到父级最大高度。了解WPF布局
ListView嵌入以下方式。
<Window ... SizeToContent="Height">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<ScrollViewer x:Name="MyScrollViewer" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ListView Name="MyListView"
ItemsSource="{Binding Path=RetrievalStringResults, Mode=OneWay}"
IsSynchronizedWithCurrentItem="True" />
</ScrollViewer>
<DockPanel Grid.Row="0" Grid.Column="1">
...
</DockPanel>
<Expander Grid.Row="1" Grid.ColumnSpan="2">
<DockPanel Height="150" HorizontalAlignment="Stretch">
<TextBox DockPanel.Dock="Top" />
</DockPanel>
</Expander>
<DockPanel Grid.Row="2" Grid.ColumnSpan="2">
... some buttons
</DockPanel>
</Grid>
</Window>
我用SizeToContent因为我上了底部包裹在一个扩展,其中应扩大了需求,因此实际上我的主窗口需要调整文本框。这实际上工作正常。
问题是尽管ListView的高度不是启动时的最大高度,所以我得到了“自动调整大小”的效果。
如何将ListView的高度设置为父母高度的最大值以避免此效应?
另一个更一般的问题。我认为避免静态布局参数(hight/width的静态值)很好,但我感觉我失去了对UI控件的一些控制。
我意识到,手动调整我的主窗口的高度,它会跳过由底部扩展器包裹的DockPanel的150个高度,无论如何要避免这种情况?
什么是动态UI布局中最好的实践?我研究了DockPanel比StackPanel更加动态地调整周围的控制。但我想这不是一切。
请尝试一次提出一个问题。 – svick 2012-02-07 13:01:43