WPF 中绑定文本的字符串格式
String format for binding text in WPF
说我有静态文本资源
public static string MainText = "Test: {0} Test2: {1}";
然后我想像这样在 WPF 中使用此文本
<Label Content="x:Static ***.MainText" />
但要为它绑定两个值,我该怎么做?
这里有两种方法,一种有转换器,一种没有。
绑定中的 "Text1" 和 "Text2" 是 DataContext 的属性。
您需要将 "MainText" 更改为 属性:
public static string MainText { get; set; } = "Test: {0} Test2: {1}";
没有转换器:
<Label>
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{x:Static local:MainWindow.MainText}">
<Binding Path="Text1" />
<Binding Path="Text2" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label.Content>
</Label>
带转换器:
<Label>
<Label.Resources>
<local:TextFormatConverter x:Key="TextFormatConverter" />
</Label.Resources>
<Label.Content>
<MultiBinding Converter="{StaticResource TextFormatConverter}" ConverterParameter="{x:Static local:MainWindow.MainText}">
<Binding Path="Text1" />
<Binding Path="Text2" />
</MultiBinding>
</Label.Content>
</Label>
和转换器:
public class TextFormatConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string fmt = parameter as string;
if (!string.IsNullOrWhiteSpace(fmt))
return string.Format(fmt, values);
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
说我有静态文本资源
public static string MainText = "Test: {0} Test2: {1}";
然后我想像这样在 WPF 中使用此文本
<Label Content="x:Static ***.MainText" />
但要为它绑定两个值,我该怎么做?
这里有两种方法,一种有转换器,一种没有。
绑定中的"Text1" 和 "Text2" 是 DataContext 的属性。
您需要将 "MainText" 更改为 属性:
public static string MainText { get; set; } = "Test: {0} Test2: {1}";
没有转换器:
<Label>
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{x:Static local:MainWindow.MainText}">
<Binding Path="Text1" />
<Binding Path="Text2" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label.Content>
</Label>
带转换器:
<Label>
<Label.Resources>
<local:TextFormatConverter x:Key="TextFormatConverter" />
</Label.Resources>
<Label.Content>
<MultiBinding Converter="{StaticResource TextFormatConverter}" ConverterParameter="{x:Static local:MainWindow.MainText}">
<Binding Path="Text1" />
<Binding Path="Text2" />
</MultiBinding>
</Label.Content>
</Label>
和转换器:
public class TextFormatConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string fmt = parameter as string;
if (!string.IsNullOrWhiteSpace(fmt))
return string.Format(fmt, values);
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}