Вот окно с простым списком:
Код прост:
<Window x:Class="Wpf_List.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border BorderBrush="Black" BorderThickness="2" Grid.Column="1">
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<!--HorizontalAlignment="Stretch" below has no effect :(-->
<Border CornerRadius="5" BorderBrush="DarkRed" SnapsToDevicePixels="True" BorderThickness="1"
Margin="1" Padding="4,2"
HorizontalAlignment="Stretch"
>
<TextBlock Text="{Binding}"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
<sys:String>First</sys:String>
<sys:String>Second</sys:String>
<sys:String>Some item with a long name</sys:String>
</ListBox>
</Border>
</Grid>
</Window>
Ширина каждого объекта отличается. Похож "Автоматический". Я попробовал различные пути, но не сделал нашел, что заставил объекты расширить горизонтально без жесткого кодирования ширину.
Как делают меня?
ListBox
имеет свойство с именем HorizontalContentAlignment
. Думаю, установка на Stretch
поможет.
Хотя, если вы повторно шаблонизируете ListBox
и / или измените его ItemContainerStyle
, убедитесь, что значение этого свойства применяется там, где это необходимо (через TemplateBinding
s).