WPF TextBlock.Text StringFormat 不起作用



我有以下代码:

<TextBlock Grid.Row="0" Grid.Column="2" FontWeight="Bold" FontSize="13" Name="PART_FRBold">
                                <TextBlock.Text>
                                    <MultiBinding StringFormat="This person is:  {}{0}; {1}, {2}">
                                        <Binding Path="PersonID"/>
                                        <Binding Path="LastName"/>
                                        <Binding Path="FirstName"/>
                                    </MultiBinding>
                                </TextBlock.Text>
                            </TextBlock>

我可以在ViewModel中看到TheSID,LastName和FirstName都存在。但是实际上没有任何内容归功于页面。我唯一能想到的是StringFormat不正确。

Mikael Koskinen的答案正确地指出,格式字符串存在问题(信用额到期信用)。

问题不是格式字符串中的" 此人:",而是错位的{}逃生序列。因此,尽管Mikael建议的解决方案/解决方法有效,但也有些复杂。为了使格式字符串正常工作,只需要将逃生序列{}放置在格式字符串的开始时:

StringFormat="{}This person is:  {0}; {1}, {2}"

更新3.3:

实际问题是语法错误。有关正确的语法

用于将来的参考:您可以在StringFormat中使用"静态"零件,您只需使用{}}启动StringFormat。

解决方法的原始错误答案:

问题是您无法在StringFormat属性中添加"此人"。如果删除该部分:

        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0}; {1}, {2}">
                <Binding Path="PersonID"/>
                <Binding Path="LastName"/>
                <Binding Path="FirstName"/>
            </MultiBinding>
        </TextBlock.Text>

您可以看到实际的绑定有效。

您可以通过为文本的"静态"部分使用静态资源来解决此问题并与之绑定:

        <TextBlock.Resources>
            <system:String x:Key="MyString">This person is</system:String>
        </TextBlock.Resources>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} {1}; {2}, {3}">
                <Binding Source="{StaticResource MyString}" />
                <Binding Path="PersonID"/>
                <Binding Path="LastName"/>
                <Binding Path="FirstName"/>
            </MultiBinding>
        </TextBlock.Text>

最新更新