我有一个列表框,我想占用窗口的宽度,列表框项目将扩展到列表框的大小。
每个列表框项目都是一个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>
但是,当我输入文本框并且文本宽度超过列表框的宽度时,列表框项目会不断增长,水平滚动条会显示出来。
我想要实现的是文本框的最大宽度,直到列表框,而不是扩大。有谁知道如何实现这种布局?
答案 0 :(得分:6)
尝试将ScrollViewer.HorizontalScrollBarVisibility="Disabled"
添加到ListBox
,这对我有用。
答案 1 :(得分:2)
问题是你的列表框包含一个scrollviewer,这意味着它的子节点可以有他们想要的任何大小,滚动查看器会处理它。您的ColumnDefinition实际上说“使用我们拥有的所有无限空间”。 我想到的一个解决方案是将网格宽度绑定到ListBox ActualWidth
Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualWidth}"
但是,Dmitrys解决方案可能更好。