我以前有这个:
xmlns:wpf="clr-namespace:Pol.Wpf;assembly=Pol.Wpf"
Heading="{wpf:Translation Id=5589, Default=Evaluation on, IsUpper=True}"
这很好用,给了我一个输出: “评估”
然后我需要在标题中插入日期,格式为:
Heading="{Binding EvaluationDateTime, StringFormat='{} Evaluation on {0:dd-MM-yyyy HH:mm}'}"
这给了我输出: 评估于2016年4月12日10:12
完美,但我需要改变我的 “评估”使用
"{wpf:Translation Id=5589, Default=Evaluation on, IsUpper=True}"
我尝试了很多东西,但是无法让我的字符串与binding,stringformat和translate函数结合使用。 我需要它来处理这样的事情:
Heading="{Binding EvaluationDateTime, StringFormat='{} {wpf:Translation Id=5589, DefaultTranslation=Evaluation on, IsUpper=True} {0:dd-MM-yyyy HH:mm}'}"
答案 0 :(得分:0)
由于我无法确定Pol.Wpf.TranslationExtension
课程的确切内容以及您是否有能力修改它,我将提出一个更通用的解决方案。
我们的想法是对TranslationExtension
进行子类化,并提供格式化原始扩展所产生的值的功能。代码简短而简单:
public class FormattedTranslationExtension : TranslationExtension
{
public string Format { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var baseValue = base.ProvideValue(serviceProvider)?.ToString();
if (baseValue != null && Format != null)
return string.Format(Format, baseValue);
else
return baseValue;
}
}
然后你的绑定看起来像这样:
Heading="{Binding EvaluationDateTime,
StringFormat='{local:FormattedTranslation
Id=5589,
DefaultTranslation=Evaluation on,
IsUpper=True,
Format='{}{0} {{0:dd-MM-yyyy HH:mm}}'}"
这里的前提是我们的扩展将生成一个字符串"Evaluation on {0:dd-MM-yyyy HH:mm}"
(或翻译的等价物),以便它可以用来格式化日期。由于我们自己使用string.Format
方法,我们需要通过将{0:dd-MM-yyyy HH:mm}
表达式放在一对额外的花括号中来转义它,因此我们有{{0:dd-MM-yyyy HH:mm}}
。
如果您可以访问TranslationExtension
类,则可以直接将此逻辑放入其中。