这个问题一定有一个优雅的解决方案,但我在网上找不到任何东西。我有一个网格,它有一列和一行的宽度/高度*,包含一个列表框。我将 Window SizeToContents 设置为 WidthAndHeight 以允许窗口调整为每组 UI 小部件/字体的适当大小。当我将项目添加到 ListBox 时,它会调整大小,导致窗口变大。
如果我更改窗口的大小,我希望 ListBox 调整大小,但是如果我添加的内容比 ListBox 的宽度长,我希望滚动条出现而不是让它增长,从而导致窗口增长。如果我为 Window 设置显式大小并将 SizeToContent 设置为 Manual(默认值),它会按我的意图工作。
有没有办法在启动时根据内容调整窗口大小并继续让 ListBox 随窗口大小而不是其内容而增长?
最佳答案
按照 Potecaru Tudor 的建议,我通过将 ListBox 包装在另一个容器中并将 ListBox 的高度绑定(bind)到容器的 ActualHeight 来解决了类似的问题。
这是一个 XAML 代码片段来提供帮助:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border x:Name="HeightHelperPanel" Grid.Row="0">
<ListBox ItemsSource="{Binding Path=FileNameCollection}"
MinHeight="60"
Height="{Binding Path=ActualHeight, ElementName=HeightHelperPanel}"/>
</Border>
</Grid>
基本上,Border 容器在其内容增长时不会增长,但会一直拉伸(stretch)到网格行的高度。网格行将填满包含窗口允许的任何空间,但不希望在窗口上强制任何高度限制。 ListBox 的高度因此被限制为边框的高度。
希望对遇到这个令人沮丧的问题的其他人有所帮助。
关于wpf - 让 ListBox 随窗口调整大小,但不随内容调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200406/