WPF' *'字符间距不正确

时间:2014-06-23 21:50:33

标签: c# wpf

我在Windows通用应用中有一个ListBox,每个ListBoxItem都是Grid,其中包含不同文本和图片的列。对于某些ColumnDefinitions我有特定的宽度,然后我尝试在剩余的列中均匀分配剩余的空间。据我所知,*字符会这样做,但似乎表现得更像Auto,并且只分配必要的空间量。

所以我不是foo bar baz而是foobarbaz

有谁可能知道我做错了什么?

<ListBox x:Name="ItemsListBox" Grid.Row="3"  Margin="0, 80, 0, 80" VerticalAlignment="Top" ItemsSource="{Binding Items}" Loaded="ItemsListBox_Loaded">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="ItemsListBoxGrid">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="60" />
                    <ColumnDefinition Width="150" />
                    <ColumnDefinition Width="45" />
                    <ColumnDefinition Width="100" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0" Height="40" Source="{Binding Img}" />
                <TextBlock Grid.Column="1"  Text="{Binding Name}" />
                <TextBlock Grid.Column="2" Text="{Binding Level}" />
                <TextBlock Grid.Column="3" Text="{Binding Rarity}" />
                <TextBlock Grid.Column="4" Text="{Binding Type}" />
                <TextBlock Grid.Column="5" Text="{Binding MinSaleOffer}" />
                <TextBlock Grid.Column="6" Text="{Binding MaxBuyOffer}" />
                <TextBlock Grid.Column="7" Text="{Binding Margin}" />
                <TextBlock Grid.Column="8" Text="{Binding Supply}" />
                <TextBlock Grid.Column="9" Text="{Binding Demand}" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

2 个答案:

答案 0 :(得分:2)

ListBox的默认样式将HorizontalContentAlignment属性设置为Left,这反过来导致所有视觉效果左对齐,而不是延伸到可用空间。因此,您正在寻找的“剩余空间”实际上为零。

使用:

<ListBox HorizontalContentAlignment="Stretch">`
    <!-- etc ... -->
</ListBox>

答案 1 :(得分:1)

您没有做错任何事情,它只是默认容器(ListBoxItem)样式,它将内容对齐到左侧,从而阻止您的网格进行测量/排列。
只需将以下内容添加到ListBox即可。

<ListBox.ItemContainerStyle>
     <Style TargetType="ListBoxItem">
          <Setter Property="HorizontalAlignment" Value="Stretch"/>
          <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
     </Style>
</ListBox.ItemContainerStyle>