Элементы в ListBox не растягиваются должным образом - PullRequest
0 голосов
/ 03 ноября 2011

Проверьте это xaml:

<Window
  x:Class="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"
  Width="300">
  <ListBox HorizontalContentAlignment="Stretch"
      Grid.IsSharedSizeScope="True">
    <ListBox.ItemsSource>
      <x:Array Type="{x:Type sys:Int32}">
        <sys:Int32>25</sys:Int32>
        <sys:Int32>10</sys:Int32>
        <sys:Int32>50</sys:Int32>
        <sys:Int32>30</sys:Int32>
        <sys:Int32>80</sys:Int32>
      </x:Array>
    </ListBox.ItemsSource>
    <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem"
           BasedOn="{StaticResource {x:Type ListBoxItem}}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
      </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
      <DataTemplate>
        <Grid Background="#FFE41515">
          <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="name" Width="Auto"/>
            <ColumnDefinition SharedSizeGroup="value"/>
          </Grid.ColumnDefinitions>

          <TextBlock Text="Value:"/>
          <ProgressBar
              Value="{Binding Mode=OneWay}"
              Grid.Column="1" 
              HorizontalAlignment="Stretch"
              HorizontalContentAlignment="Stretch"/>
        </Grid>
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>
</Window>

Вот вывод, обратите внимание, что ProgressBar не растягивается, почему?
Если элементы красного цвета, это означает, что каждый элемент заполняет всеширина, тогда почему ProgressBar не растягивается ??
enter image description here

1 Ответ

4 голосов
/ 03 ноября 2011

Если у вас есть только SharedSizeGroups, оставшееся пространство никогда не будет занято, они всегда ведут себя как Width="Auto" (размер к содержимому) с ограничением на самый большой элемент. Поскольку у вас есть только два столбца, вам даже не нужны две такие группы, так как вторая будет уже иметь одинаковую ширину в каждом элементе, верно?

Как насчет этого:

  <Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="name" Width="Auto"/>
    <ColumnDefinition /> <!-- Implicit: Width="*" -->
  </Grid.ColumnDefinitions>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...