需要在WPF ListBox中格式化自动编号的行

时间:2015-02-24 19:47:09

标签: c# wpf listbox string-formatting

我有一个自动编号的ListBox,如下所示。我想格式化每个ListBoxItem前面的数字,以便所有行中的数字彼此正确对齐。我想我可以使用项目计数来确定索引中有多少个字符,使用该信息在我的viewmodel中设置格式,并绑定到它。不幸的是,我甚至没有想出如何为我的数字格式化恒定的字段宽度。 ListBox看起来会更好,内容排成一行。所以我需要知道如何设置格式,以便我可以绑定它。

            <ListBox ItemsSource="{Binding Profiles}" SelectedItem="{Binding SelectedProfile, Mode=TwoWay}"
                     AlternationCount="{Binding Path=Profiles.Count}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Margin="0,0,5,0"
                                Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplatedParent.(ItemsControl.AlternationIndex)}"/>
                            <TextBlock Text="{Binding}" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

1 个答案:

答案 0 :(得分:0)

您的Profile类型应具有某种Index属性,您应该设置该属性。 AlternationCount“使交替的容器具有独特的外观,”所以我相信你没有正确使用它。当您将该属性添加到Profile类型后,您就可以为ItemTemplate执行某些操作:

<DataTemplate>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100">
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <TextBlock HorizontalAlignment="Right"
                   Margin="0 0 5 0"
                   Grid.Column="0"
                   Text="{Binding Index}"/>
        <TextBlock Grid.Column="1"
                   Text="{Binding}" />
    </Grid>
</DataTemplate>