关于之前写的动态字符串的绑定再说一点
1、我今天发现一个奇怪的事情
我之前写的关于动态字符串的绑定
https://www.cnblogs.com/guchen33/p/18060276
<TextBlock
Width="200"
Height="30"
FontSize="20"
Text="{Binding Content, StringFormat={}{0}!}" />
public class StringFormatViewModel:BindableBase
{
private string _content;
public string Content
{
get => _content;
set =>SetProperty(ref _content, value);
}
public StringFormatViewModel()
{
Content = "HelloWorld";
}
}
打印出来的结果是HelloWorld!
我以为这就完了
今天我试着给Button写出问题了
<Button
Width="200"
Height="30"
FontSize="20"
Content="{Binding Content, StringFormat={}{0}!}" />
public class StringFormatViewModel:BindableBase
{
private string _content;
public string Content
{
get => _content;
set =>SetProperty(ref _content, value);
}
public StringFormatViewModel()
{
Content = "HelloWorld";
}
}
我发现Buton的内容没变,还是HelloWorld,没有感叹号
查看源码,发现
public string Text { get; set; }
public object Content { get; set; }
在查看BindingBase。发现
所以TextBlock是字符串的拼接
我们继续看StringFormat
Gets or sets a string that specifies how to format the binding if it displays the bound value as a string.A string that specifies how to format the binding if it displays the bound value as a string.
意思是
获取或设置一个字符串,该字符串指定在绑定值显示为字符串时如何设置绑定的格式。一个字符串,指定在绑定值显示为字符串时如何设置绑定的格式。
StringFormat是为string类型的绑定设计的,所以它不能直接应用于Button的Content属性。这就是为什么当你尝试直接在Button的Content属性上使用StringFormat时没有效果的原因。
看它前面大写的String就知道了,我要是英文好Format是格式的意思,我也应该直到它是对string的扩展
所以我将Content改成TextBlock试下,成功了
<Button
Width="200"
Height="30"
FontSize="20">
<Button.Content>
<TextBlock Text="{Binding Content, StringFormat={}{0}!}"/>
</Button.Content>
</Button>