有没有办法用字符串PadLeft进行精确定位?

时间:2013-09-18 07:38:24

标签: c# wpf string padding

我想垂直编组冒号,但根据字符大小,它们之间存在差距。

我对所有行使用stringExpression1.PadRight(11)

是否有内置方法或我需要measure字符宽度才能更好地查看?

注意:它们必须是字符串我不能使用可视组件,例如TextBlock

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用Tab“\ t”。如果像Systolic,Diastolic等左侧描述是常数,那么您可以添加适当数量的"\t"以提供正确的间距,如下所示。

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.AppendLine(String.Format("{0}\t\t: {1}", "Systolic", 80));
        stringBuilder.AppendLine(String.Format("{0}\t\t: {1}", "Diastolic", 170));
        stringBuilder.AppendLine(String.Format("{0}\t\t: {1}", "Pulse", 50));
        stringBuilder.AppendLine(String.Format("{0}\t: {1}", "LooooooongDesc", 50));
        this.tb.Text = stringBuilder.ToString();

来自Sheridan的编辑>>>

要使其在WPF中有效,您需要将TextBox的{​​{3}}设置为True

<TextBox AcceptsTab="True" ... />

答案 1 :(得分:0)

它没有真正帮助,但希望为s.one

显示出一种方式

用法

            List<string> items = new List<string>() {        
                          UIResources.Systolic, 
                          UIResources.Diastolic, 
                          UIResources.Pulse };

            var result = GetAlined(items);

帮助代码

    const string EMPTYLINE="                                                                                                                                ";   
    public static int GetDefaultItemWidth(string text,System.Drawing.Font font=null)
    {
        if (font == null)
            font = System.Drawing.SystemFonts.DefaultFont;

        return System.Windows.Forms.TextRenderer.MeasureText(text, font).Width;
    }

    public static List<string> GetAlined(List<string> inputString)
    {
        double max = default(double);
        var spaceWidth = GetDefaultItemWidth(" ");
        foreach (var item in inputString)
        {
            var width = GetDefaultItemWidth(item);

            max = Math.Max(max, width);
        }

        List<string> resultItems = new List<string>(inputString.Count);
        foreach (var item in inputString)
        {
            var width = GetDefaultItemWidth(item);
            if ((max - width) > spaceWidth)
            {
                var spaceCount = (int)Math.Round((max - width) / spaceWidth);
                string resultItem = item;
                resultItem=EMPTYLINE.Take(spaceCount).ToString() + resultItem;
                resultItems.Add(resultItem);
            }
            else
            {
                resultItems.Add(item);
            }
        }
        return resultItems;
    }