Управляет вертикальным выравниванием с сеткой слева и справа

1

У меня есть пользовательский список с меткой и флажок в каждой строке. Я хотел бы иметь ярлык слева и флажок справа.

подход:

<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>

текущий вид:

Изображение 174551

Спасибо

  • 0
    вы пробовали <Label Grid.Column="1" HorizontalAlignment="Left" />
  • 0
    Я бы использовал <DockPanel> т.е. <Label DockPanel.Dock="Left"/> <CheckBox DockPanel.Dock="Right"/> <Label/><!--empty column goes as last --> HTH
Теги:
xaml
wpf
wpf-controls

1 ответ

3
Лучший ответ

Ваш 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>
  • 0
    +1 я узнал что-то новое :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню