WPF TextBlock.Text StringFormat不起作用

时间:2019-03-01 16:32:11

标签: wpf xaml

我有以下代码:

<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中看到PersonID,LastName和FirstName都存在。但是实际上没有任何内容呈现到页面。我唯一能想到的是StringFormat不正确。

2 个答案:

答案 0 :(得分:1)

更新了3.3:

实际的问题是语法错误。有关正确的语法,请参见https://stackoverflow.com/a/54949686/66988

作为将来的参考:您可以在StringFormat中使用“静态”部分,只需使用{}来启动StringFormat。

原始不正确答案和解决方法:

问题是您不能在StringFormat属性内添加“此人是”。如果您删除该部分:

add_action('woocommerce_single_product_summary', 'display_specific_shipping_class', 15 );
function display_specific_shipping_class(){
    global $product;

    // HERE define your targeted shipping class name
    $defined_shipping_class = "Estimated Delivery in 7-15 days";

    // Get the product shipping class WP_Term Object
    $term = get_term_by( 'slug', $product->get_shipping_class(), 'product_shipping_class' );

    if( is_a($term, 'WP_Term') && $term->name == $defined_shipping_class ){
        echo '<p class="product-shipping-class">' . $term->name . '</p>';
    }
}

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

您可以通过为文本的“静态”部分使用静态资源并将其绑定来解决此问题:

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

答案 1 :(得分:1)

Mikael Koskinen's answer正确地指出格式字符串存在问题(应归功于贷方)。

问题不是格式字符串中的文本“ 此人是:”,而是放错位置的{}转义序列。因此,尽管Mikael提出的建议解决方案/解决方法可行,但它也有些复杂。为了使格式字符串起作用,只需要将转义序列{}放在格式字符串的开头:

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