Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串文本格式化到特定位置_C#_Windows Phone 8_Position_String Formatting - Fatal编程技术网

C# 将字符串文本格式化到特定位置

C# 将字符串文本格式化到特定位置,c#,windows-phone-8,position,string-formatting,C#,Windows Phone 8,Position,String Formatting,在Windows Phone 8项目中,我有以下带有一些数据的列表框: 我想列出所有和我画的红线对齐的日期。基本上,我希望它在开始后打印日期N个空格,而不是在温度之后 现在我有了这个,但我不理解{}的格式化是如何工作的 for (int i = 0; i < values.Length; i++) { listboxData.Items.Add(String.Format("{0,-12}{1,8}",values[i].value + unit, values[i].dat

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

我想列出所有和我画的红线对齐的日期。基本上,我希望它在开始后打印日期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));
}
for(int i=0;i

你能给我解释一下它是如何工作的以及我的问题的可能解决方案吗?

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

比如说。我将打印10个字符的I,然后打印一个

iiiiiiiiii

AAAAAAAAAA


看到宽度上的差异了吗?堆栈溢出正在使用true type字体显示我的帖子。

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

listBox.ItemsSource = values;
或者可以在xaml中实现

<ListBox ItemsSource="{Binding values}" />

以上假设您有一个DataContext,该DataContext具有包含临时读数的values属性

下一步是更改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>


想到了你的解决方案看起来很有希望,但是我的时间和日期相互重叠:/@sparcopt似乎忘记了在每个
文本块上指定列。只需为第一个
文本块添加
Grid.Column=“0”
,为第二个添加
Grid.Column=“1”
。修复了!谢谢@AlaaMasoud!