需要在 WPF ListBox 中格式化自动编号的行
Need to format automatically numbered rows in WPF ListBox
我设置了一个带有自动编号的列表框,如下所示。我想格式化每个 ListBoxItem 前面的数字,以便所有行中的数字彼此右对齐。我想我可以使用项目计数来确定索引中有多少个字符,使用该信息在我的视图模型中设置格式,并绑定到它。不幸的是,我什至没有想出如何为我的数字格式化一个恒定的字段宽度。排列好内容后,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>
您的 Profile
类型应该有某种类型的 Index
属性,您应该设置它。 AlternationCount
"enables alternating containers to have a unique appearance," 所以我相信你没有正确使用它。当您将 属性 添加到您的 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>
我设置了一个带有自动编号的列表框,如下所示。我想格式化每个 ListBoxItem 前面的数字,以便所有行中的数字彼此右对齐。我想我可以使用项目计数来确定索引中有多少个字符,使用该信息在我的视图模型中设置格式,并绑定到它。不幸的是,我什至没有想出如何为我的数字格式化一个恒定的字段宽度。排列好内容后,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>
您的 Profile
类型应该有某种类型的 Index
属性,您应该设置它。 AlternationCount
"enables alternating containers to have a unique appearance," 所以我相信你没有正确使用它。当您将 属性 添加到您的 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>