如何格式化ListBox列宽度

时间:2014-04-09 07:57:29

标签: xaml windows-phone-8 listbox

我有一个带有四列的ListBox,放在我的网格的第二行,它还包含4列。我使用Main网格的ColumnDefinitions在ListBox上面放置了四个标题,我需要放置在主网格的第1行中的ListBox,以使ColumnWidths根据我创建的标题进行匹配。

<Grid Margin="12,0,12,6">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="40"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <TextBlock Text="One" Grid.Row="0" Grid.Column="0"/>
                <TextBlock Text="Two" Grid.Row="0" Grid.Column="1"/>
                <TextBlock Text="Three" Grid.Row="0" Grid.Column="2"/>
                <TextBlock Text="Four" Grid.Row="0" Grid.Column="3"/>

                <ListBox x:Name="HistoryListBox" Grid.Row="1" Grid.ColumnSpan="4">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width*"/>
                                    <ColumnDefinition Width*"/>
                                    <ColumnDefinition Width*"/>
                                    <ColumnDefinition Width*"/>
                                </Grid.ColumnDefinitions>

                                <TextBlock Grid.Column="0" Text="{Binding One}"/>
                                <TextBlock Grid.Column="1" Text="{Binding Two}"/>
                                <TextBlock Grid.Column="2" Text="{Binding Three}"/>
                                <TextBlock Grid.Column="3" Text="{Binding Four}"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

            </Grid>

我在ListBox中看到的只是混乱的数据,没有分成正确的列宽以匹配上面的TextBox。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

也许这就够了

<ListBox x:Name="HistoryListBox" Grid.Row="1" Grid.ColumnSpan="4">
   <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
         <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
      </Style>
   </ListBox.ItemContainerStyle>
   <ListBox.ItemTemplate>
      <DataTemplate>
          <Grid HorizontalAlignment="Stretch">
             <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
             </Grid.ColumnDefinitions>

             <TextBlock Grid.Column="0" Text="{Binding One}"/>
             <TextBlock Grid.Column="1" Text="{Binding Two}"/>
             <TextBlock Grid.Column="2" Text="{Binding Three}"/>
             <TextBlock Grid.Column="3" Text="{Binding Four}"/>
           </Grid>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

答案 1 :(得分:0)

当您使用ListBox.ItemTemplate时,表示您为listBox的每个项目都有一个网格。

如果在每列上使用*,则会获得等于列的可用空间,但每个元素仍然有不同的网格。

如果您坚持使用Listbox.ItemTemplate方法,我建议使用Grid而不是ListBox或使用SharedSizeGroup属性,您将能够为每列提供不同的大小,并仍然保持网格的“错觉”。