无法使我的水平ListBox与'数据模板'完全拉伸。
我研究了这个主题,最流行的答案是将ItemContainer样式设置为:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
这对我来说似乎不起作用。
这是完全XAML代码。 ListBox.ItemsSource = ObservableCollection
<UserControl.Resources>
<ResourceDictionary>
<ItemsPanelTemplate x:Key="ItemsPanel">
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
<DataTemplate x:Key="ItemTemplate">
<Button Margin="-2,-2,-4,-2" >
<StackPanel>
<TextBlock Text="{Binding}"
TextWrapping="Wrap"/>
</StackPanel>
</Button>
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
<ListBox VerticalAlignment="Top"
Height="50"
Background="Red"
ItemsPanel="{StaticResource ItemsPanel}"
ItemTemplate="{StaticResource ItemTemplate}"
ItemsSource="{Binding Headers}" >
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
答案 0 :(得分:0)
不幸的是,如果您真的想要使用与ListBox(或实际上任何ItemsControl)的数据绑定,这很难做到。
原因是没有标准面板像StackPanel一样工作,但在布局方向上拉伸其元素。
我甚至不知道有任何第三方专家组这样做(这让我有时想知道工具包提供商到底是什么)。我有一个小标记,我下次需要时自己写一个,因为如果你已经熟悉开发面板,那么很容易做到。
如果不是,那么以编程方式创建网格可能会更好。
我假设您有可变数量的元素(否则您可以在xaml中定义每个元素,并且不需要ListBox)。
除了使用带有数据绑定的ListBox,您还可以以编程方式在Grid中创建ToggleButtons,同时将GridColumns设置为星号。
当然你也可以改变你的设计并让按钮左对齐。
我知道这很麻烦,但就是这样。