关于之前写的动态字符串的绑定再说一点

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。发现
image

所以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>
posted @ 2024-06-30 23:13  孤沉  阅读(3)  评论(0编辑  收藏  举报