使用StringFormat的WPF填充

时间:2015-02-03 13:32:15

标签: wpf xaml

如何通过StringFormat在wpf中填充字符串? 我正在使用多重绑定:

<MultiBinding StringFormat="Name: {0}, age: {1}">
    <Binding Path="Name"/>
    <Binding Path="Age"/>
 </MultiBinding>

有没有办法填充字符串,例如列Age从位置50开始?我正在寻找类似于

的东西
string.PadLeft(50)

2 个答案:

答案 0 :(得分:2)

您应该能够以字符串格式填充您的值,如下所示:

<MultiBinding StringFormat="Name: {0}, age: {1,50}">
    <Binding Path="Name"/>
    <Binding Path="Age"/>
 </MultiBinding>

但是,您应该注意,您的请求填充的工作原理。在 Age值之后,Name值将填充50个空格,而不是从第50位开始。

我无法知道,当Age值位于MultiBinding时,它将强制确定age值的确切起始位置,除非它是第一个数据绑定值。此外,这只会填充实际值,而不是{{1}}文本。

答案 1 :(得分:2)

其他方式可能是使用Converter

public class PaddingConverter : IMultiValueConverter
{
    public int Width { get; set; }

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string name = values[0] as string;
        string age = values[1] as string;
        var text = String.Format("Name: {0}, age: {1}", name, age);
        return text.PadLeft(Width);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

和你的xaml:

<local:PaddingConverter x:Key="PaddingConverter" Width="50"/>
<MultiBinding Converter={StaticResource PaddingConverter}>
    <Binding Path="Name"/>
    <Binding Path="Age"/>
</MultiBinding>