我需要格式化每个文本块中的文本,这是我的ListBox的一个项目。我设法制作了一些东西,但它看起来不像我调用Console.WriteLine-Method。
private void addNewGameItem(string gamename, string lastChangedDate)
{
ListBoxItem lbi = new ListBoxItem();
StackPanel stpl = new StackPanel();
TextBlock tbl = new TextBlock();
tbl.Text = String.Format("{0,-100} {1,30}", gamename, lastChangedDate);
tbl.FontSize = textBlockFontsize;
stpl.Orientation = Orientation.Horizontal;
stpl.Children.Add(tbl);
lbi.Content = stpl;
savedGamesList.Items.Add(lbi);//Add the ListBoxItem to the ListBox
}
问题在于,如果游戏名称比例如前一个更长,则日期将更加正确。我如何格式化这个,不管游戏名称有多长,所以日期字符串将从每个文本块中的相同位置开始?
答案 0 :(得分:1)
这在XAML中可能更容易完成,而不是后面的代码,因为您可以更轻松地定义用于以这种方式显示列表项的DataTemplate
。将您的游戏列表设为ObservableCollection
,并将列表框的ItemsSource
绑定到该列表。这意味着当您向列表中添加新项目时它会自动更新。
然后你可以将字符串分成两部分,一部分用于游戏名称,另一部分用于日期:
<ListBoxItem ...>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding GameName"}/>
<TextBlock Text="{Binding LastChangedDate"}
HorizontalAlignment="Right"/>
</StackPanel>
</DataTemplate>
</ListBoxItem>
然后在ListBox
样式定义中包含以下行:
HorizontalContentAlignment="Stretch"
这将使每个列表框项目填充列表框的整个宽度,并且(只要格式化日期以使它们都具有相同的长度)正确对齐它们。