我想看看是否有办法将datetime 字符串格式和静态字符串组合在一起。
所以目前我可以用这样的文字格式化我的日期和前缀:
<TextBlock Text="{Binding MyDate StringFormat=Started {0:dd-MMM-yyyy HH:mm}}"
结果如下:
Started 01-Jan-2011 12:00
在过去,我已经能够使用静态字符串来保持日期的通用格式;像这样(注意没有前缀文本):
<TextBlock Text="{Binding MyDate, StringFormat={x:Static i:Format.DateTime}}" />
其中i:Format
是一个静态类,其静态属性DateTime
返回字符串"dd-MMM-yyyy HH:mm"
所以我在问什么;有没有办法组合这些方法,以便我可以前置我的日期并使用常见的静态字符串格式化程序?
答案 0 :(得分:2)
您可以使用类似的东西代替Binding:
public class DateTimeFormattedBinding : Binding {
private string customStringFormat = "%date%";
public DateTimeFormattedBinding () {
this.StringFormat = Format.DateTime;
}
public DateTimeFormattedBinding (string path)
: base(path) {
this.StringFormat = Format.DateTime;
}
public string CustomStringFormat {
get {
return this.customStringFormat;
}
set {
if (this.customStringFormat != value) {
this.customStringFormat = value;
if (!string.IsNullOrEmpty(this.customStringFormat)) {
this.StringFormat = this.customStringFormat.Replace("%date%", Format.DateTime);
}
else {
this.StringFormat = string.Empty;
}
}
}
}
}
然后像{local:DateTimeFormattedBinding MyDate, CustomStringFormat=Started %date%}
您也可以使用替换泛型,并通过不同的属性(或属性)设置它。
答案 1 :(得分:1)
你可以使用这样的转换器:
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource StringFormatConcatenator}">
<Binding Source="Started {0}"/>
<Binding Source="{x:Static i:Format.DateTime}"/>
<Binding Path="MyDate"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
public class StringFormatConcatenator : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string format = values[0].ToString();
for (int i = 0; i < (values.Length - 1) / 2; i++)
format = format.Replace("{" + i.ToString() + "}", "{" + i.ToString() + ":" + values[(i * 2) + 1].ToString() + "}");
return string.Format(format, values.Skip(1).Select((s, i) => new { j = i + 1, s }).Where(t => t.j % 2 == 0).Select(t => t.s).ToArray());
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return new string[] { };
}
}
您可以根据需要添加任意数量的变量(格式,值)
其中:
绑定0:没有特定变量格式的完整格式({0:dd-MMM-yyyy HH:mm}替换为{0})
绑定奇数(1,3,5 ......):变量特定格式(“dd-MMM-yyyy HH:mm”)
绑定偶数(2,4,6 ...):变量值(MyDate)