列表框项目延伸到列表框的宽度但不超过宽度

时间:2011-09-21 13:20:38

标签: c# .net wpf

我有一个列表框,我想占用窗口的宽度,列表框项目将扩展到列表框的大小。

每个列表框项目都是一个datatemplate,其信息宽度约为150,剩余大小为描述的文本框。我希望描述texbox延伸到剩余的可用大小。所以这里是我认为会创建这种布局的示例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>

但是,当我输入文本框并且文本宽度超过列表框的宽度时,列表框项目会不断增长,水平滚动条会显示出来。

我想要实现的是文本框的最大宽度,直到列表框,而不是扩大。有谁知道如何实现这种布局?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

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

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualWidth}"
但是,Dmitrys解决方案可能更好。