获取ListBox以使用窗口调整大小,但不调整内容大小

Bri*_*rns 13 wpf grid xaml listbox sizetocontent

必须有一个优雅的解决方案,但我在网上找不到任何东西.我有一个网格,其中有一列和一行宽度/高度*,包含一个ListBox.我将Window SizeToContents设置为WidthAndHeight,以允许窗口为每个UI小部件/字体集调整大小.当我向ListBox添加项目时,它会调整大小,从而导致窗口增长.

如果我改变窗口的大小,我希望ListBox调整大小,但如果我添加的内容长于ListBox的宽度,我希望滚动条出现而不是它的增长,导致Window增长.如果我为Window设置了显式大小并将SizeToContent设置为Manual(默认值),它就像我想要的那样工作.

是否有任何方法可以在启动时将窗口大小调整为内容并继续使ListBox随窗口大小增长而不是内容增长?

FTL*_*Guy 5

按照Potecaru Tudor的建议,我通过将ListBox包裹在另一个容器中并将ListBox的Height绑定到该容器的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>
Run Code Online (Sandbox Code Playgroud)

基本上,边框容器在内容增长时不会增长,但会一直延伸到网格行的高度。网格行将填充包含窗口允许的任何空间,但不想在窗口上施加任何高度限制。因此,列表框的高度被限制为边框的高度。

希望能对遇到这个令人沮丧的问题的所有人有所帮助。


mir*_*cea -1

要使 ListBox 在更改窗口大小时调整大小,只需使用:

<ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" .../>
Run Code Online (Sandbox Code Playgroud)

要在 ListBox 中启用滚动,您可以在这里找到答案,因为 ListBox 的默认模板包含 ScrollViewer。

如何在列表框中获得垂直滚动条?