У меня есть пользовательский список с меткой и флажок в каждой строке. Я хотел бы иметь ярлык слева и флажок справа.
подход:
<ListBox x:Name="lbFieldsreq" HorizontalAlignment="Left" Height="100" Margin="513,232,0,0" VerticalAlignment="Top" Width="100">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Label Content="{Binding name, Mode=OneWay}" Grid.Column="0" HorizontalAlignment="Left" />
<Label Grid.Column="1" HorizontalAlignment="Center" /> <!--Empty column -->
<CheckBox IsChecked="{Binding ticked ,Mode=OneWay}" Grid.Column="2" HorizontalAlignment="Right" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
текущий вид:
Спасибо
Ваш XAML в основном прекрасен. Все, что вам действительно нужно сделать, это установить для свойства ListBox.HorizontalContentAlignment
значение "Stretch"
. Это в основном заставляет каждый элемент в коллекции растягиваться, чтобы заполнить всю Width
связанного ListBoxItem
. Однако вы можете улучшить это, установив Grid.IsSharedSizeScope
свойство Grid.IsSharedSizeScope
к True
. Установка этого в сочетании с свойством SharedSizeGroup
позволяет нам гарантировать, что Width
столбца каждого столбца DataTemplate
будет одинаковой. Попробуй это:
<ListBox x:Name="lbFieldsreq" HorizontalAlignment="Left" Height="100" ItemsSource="{Binding Items}" VerticalAlignment="Top" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid ShowGridLines="True" Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelColumn" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" SharedSizeGroup="CheckBoxColumn" />
</Grid.ColumnDefinitions>
<Label Content="{Binding}" Grid.Column="0" HorizontalAlignment="Left" />
<!--Empty column -->
<Label Grid.Column="1" HorizontalAlignment="Center" />
<CheckBox Grid.Column="2" IsChecked="{Binding ticked, Mode=OneWay}" HorizontalAlignment="Right" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Label Grid.Column="1" HorizontalAlignment="Left" />
<DockPanel>
т.е.<Label DockPanel.Dock="Left"/> <CheckBox DockPanel.Dock="Right"/> <Label/><!--empty column goes as last -->
HTH