Wpf 获取列表框以随窗口调整大小,但不随内容调整大小

Wpf 获取列表框以随窗口调整大小,但不随内容调整大小,wpf,xaml,listbox,grid,sizetocontent,Wpf,Xaml,Listbox,Grid,Sizetocontent,这个问题一定有一个很好的解决方案,但我在网上找不到任何东西。我有一个网格,其中有一列和一行的宽度/高度*,包含一个列表框。我将窗口大小设置为Width和Height,以便将窗口大小调整为适合每组UI小部件/字体的大小。当我向列表框添加项目时,它会调整大小,导致窗口增长 如果我更改了窗口的大小,我希望调整列表框的大小,但是如果我添加的内容超过了列表框的宽度,我希望滚动条出现,而不是它增长,从而导致窗口增长。如果我为窗口设置显式大小,并将SizeToContent设置为Manual(默认设置),它将

这个问题一定有一个很好的解决方案,但我在网上找不到任何东西。我有一个网格,其中有一列和一行的宽度/高度*,包含一个列表框。我将窗口大小设置为Width和Height,以便将窗口大小调整为适合每组UI小部件/字体的大小。当我向列表框添加项目时,它会调整大小,导致窗口增长

如果我更改了窗口的大小,我希望调整列表框的大小,但是如果我添加的内容超过了列表框的宽度,我希望滚动条出现,而不是它增长,从而导致窗口增长。如果我为窗口设置显式大小,并将SizeToContent设置为Manual(默认设置),它将按我的预期工作


有没有办法在启动时根据内容调整窗口大小,并继续使列表框随窗口大小而增长,但不随内容而增长?

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

<ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" .../>

要在列表框中启用滚动,您可以在此处找到答案,因为列表框的默认模板包括滚动查看器


这是将SizeToContent属性设置为WidthAndHeight as时产生的预期行为


您可以将列表框的宽度和高度绑定到其容器的实际宽度和实际高度属性,或者使用转换器将其直接绑定到窗口的相应属性。

HorizontalAlignment=“Stretch”VerticalAlignment=“Stretch”
我希望您有以下要求, 1) ListBox应该使用滚动条,因为它的内容比原来的要大

2) 若调整了窗口的大小,则列表框应随窗口一起增大/缩小

我用一个简单的例子尝试了同样的方法,请检查一下,如果它与您的要求不同,请告诉我

XAML代码:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Text="I am in Main Grid"/>
        <ListBox Grid.Row="1" BorderBrush="BlueViolet" BorderThickness="5" Margin="10">
            <TextBlock Text="I am a ListBox"/>
            <Button Content="Add Height and Width of ListBox by 100 pixels" Click="Button_Click"/>
            <ListBoxItem Content="ListBoxItem" Background="AliceBlue" Margin="10" BorderBrush="Blue" Width="{Binding ListBoxWidth}" Height="{Binding ListBoxHeight}"/>
        </ListBox>
    </Grid>
</Window>

根据Potecaru Tudor的建议,我解决了一个类似的问题,将列表框包装在另一个容器中,并将列表框的高度绑定到容器的实际高度

下面是一个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>

基本上,边框容器在其内容增长时不会增长,但它将保持拉伸到网格行的高度。网格行将填充包含该行的窗口允许的任何空间,但不希望在窗口上强制任何高度约束。因此,列表框的高度限制为边框的高度


希望这能帮助其他遇到这一令人沮丧问题的人。

也有同样的问题,但在网格内,高度可通过网格拆分器调节。向列表框中添加项目会增加列表框并移动gridsplitter,而不是滚动。
<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>