将字符串文本格式化为特定位置

时间:2013-07-06 15:37:12

标签: c# windows-phone-8 position string-formatting

在Windows Phone 8项目中,我有以下列表框和一些数据:

a busy cat

我想列出所有与我画的红线对齐的日期。基本上我希望它在开始后打印日期N个空格,而不是在温度之后。

现在我有这个,但我不明白{}的格式是如何工作的。

for (int i = 0; i < values.Length; i++)
{
      listboxData.Items.Add(String.Format("{0,-12}{1,8}",values[i].value + unit, values[i].date));
}

你能解释一下它的工作原理以及解决问题的可能方法吗?

2 个答案:

答案 0 :(得分:1)

如果您使用的是ListBox,那么我建议您更改ItemTemplate以匹配您想要的格式。看起来您已经拥有一组包含临时读数和读取时间的对象(您的值集合)。因此,将ItemsSource属性设置为该集合。您可以在代码中执行此操作

listBox.ItemsSource = values;

或者你可以在xaml

中完成
<ListBox ItemsSource="{Binding values}" />

以上假设您有一个DataContext,其value属性包含您的临时读数。

下一步是更改ItemTemplate以适合您的格式

<ListBox ItemsSource="{Binding values}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="55"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding value, StringFormat={}{0}°}"/>
                <TextBlock Text="{Binding date, StringFormat={}{0:MM/dd/yyyy hh:mm}}"
                           Grid.Column="1" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

答案 1 :(得分:0)

我想也许你的格式字符串正确,但问题是真正的字体。并非所有字符的宽度都相同。 Courier new可以工作(所有字符的像素宽度相同,包括空格),但这可能不是你想要的。可能必须使用两列事件..甚至可能是一张桌子?

例如。我将打印10个字符,然后打印A

IIIIIIIIII

AAAAAAAAAA

看到宽度的差异?堆栈溢出使用真实类型字体来显示我的帖子..