[英]TextBlock: Binding of Text and StringFormat
是否可以绑定Text
和StringFormat
?
<TextBlock Text="{Binding Path=Price, StringFormat={Binding Path=DecimalPoints}}" />
DecimalPoints从F0
到F15
不断变化。 不幸的是,上面的代码无法编译。
如前所述@Sheridan,在这种情况下, Binding
将不起作用。 但是您可以使用静态字符串创建一个类,并在XAML中引用它们。 语法是:
<x:Static Member="prefix : typeName . staticMemberName" .../>
以下是一个例子:
XAML
xmlns:local="clr-namespace:YourNameSpace"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<Grid>
<TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat={x:Static Member=local:StringFormats.DateFormat}}"
HorizontalAlignment="Right" />
<TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat={x:Static Member=local:StringFormats.Time}}" />
</Grid>
Code behind
public class StringFormats
{
public static string DateFormat = "Date: {0:dddd}";
public static string Time = "Time: {0:HH:mm}";
}
有关更多信息,请参阅:
我认为你最好的选择绝对是转换器。 然后你的绑定看起来像这样:
<TextBlock.Text>
<MultiBinding Converter="{StaticResource StringFormatConverter }">
<Binding Path="Price"/>
<Binding Path="DecimalPoints"/>
</MultiBinding>
</TextBlock.Text>
然后一个快速转换器(你当然可以使它更好,但这是一般的想法)。
public class StringFormatConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double number = (double)values[0];
string format = "f" + ((int)values[1]).ToString();
return number.ToString(format);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
不,你不能......原因是因为你只能绑定到DependencyProperty
的DependencyObject
,而Binding
类的StringFormat
属性只是一个string
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.