扩展到列表框宽度但不超过列表框宽度的列表框项

本文关键字:列表 不超过 扩展到 | 更新日期: 2023-09-27 18:09:08

我有一个列表框,我想占用我的窗口宽度,并且列表框项将拉伸到列表框的大小。

每个列表框项将是一个数据模板,其宽度约为150用于信息,其余大小为用于描述的文本框。我希望描述文本框拉伸到剩余的可用大小。这里是一个示例xaml我认为它会创建这样的布局:

<Window x:Class="test.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>
  <ListBox Margin="20,20,20,20" ItemsSource="{Binding Path=List}">
     <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
           <Setter Property="HorizontalContentAlignment"
                   Value="Stretch" />
        </Style>
     </ListBox.ItemContainerStyle>
     <ListBox.ItemTemplate>
        <DataTemplate>
           <Border BorderBrush="AliceBlue"
                   BorderThickness="1">
              <Grid>
              <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="150" />
                 <ColumnDefinition Width="*" />
              </Grid.ColumnDefinitions>
                 <Label Width="20"
                        Content="Test" />
                 <ComboBox Width="130" />
                 <TextBox Grid.Column="1"
                          HorizontalAlignment="Stretch"
                          HorizontalContentAlignment="Stretch" />
              </Grid>
           </Border>
        </DataTemplate>
     </ListBox.ItemTemplate>
  </ListBox>

但是,当我在文本框中键入文本宽度超过列表框的宽度时,列表框项继续增长并且显示水平滚动条。

我想要实现的是文本框的最大宽度,只是上升到列表框,而不是变宽。有人知道我怎么实现这个布局吗?

扩展到列表框宽度但不超过列表框宽度的列表框项

尝试将ScrollViewer.HorizontalScrollBarVisibility="Disabled"添加到ListBox,它对我有效。

问题是您的Listbox包含一个滚动查看器,这意味着它的子节点可以有任何他们想要的大小,滚动查看器将负责。您的ColumnDefinition实际上是说"使用我们拥有的所有无限空间"。我想到的一个解决方案是将网格宽度绑定到ListBox ActualWidth

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualWidth}"

但Dmitrys的解决方案可能更好。