WPF中的动态StringFormat

时间:2012-04-01 12:36:38

标签: wpf xaml

我有以下TextBlock样式:

    <Style TargetType="TextBlock" x:Key="MyValues">
    <Setter Property="FontStyle" Value="Italic"/>
    <Setter Property="Foreground" Value="DarkBlue"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsMetric}" Value="True">
            <Setter Property="Text">
                <Setter.Value>
                    <MultiBinding StringFormat="F1">

                    </MultiBinding>
                </Setter.Value>
            </Setter>
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsMetric}" Value="False">
            <Setter Property="Text">
                <Setter.Value>
                    <MultiBinding StringFormat="F3">

                    </MultiBinding>
                </Setter.Value>
            </Setter>
            <Setter Property="Foreground" Value="Green"/>
        </DataTrigger>
    </Style.Triggers>

然后我按如下方式使用TextBlocks

<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Breadth}" Style="{StaticResource MyValues}"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Depth}" Style="{StaticResource MyValues}"/>
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Path=Area}" Style="{StaticResource MyValues}" />

目的是根据绑定属性IsMetric设置StringFormat。样式中的Binding是空的,因为我想为多个TextBlocks应用相同的样式,所有TextBlock都绑定到不同的属性。触发器正在工作,但StringFormat`会被忽略,任何想法?

1 个答案:

答案 0 :(得分:2)

在此,您将Text属性设置为TextBlock声明和DataTriggers中的不同内容。在第一种情况下,它是Binding类的实例。在第二种情况下,它是MultiBinding类的实例。最后它是其中之一。它现在不可能同时存在。

以下标记

<Setter Property="Text">
    <Setter.Value>
        <MultiBinding StringFormat="F1">

        </MultiBinding>
    </Setter.Value>
</Setter>

实例化 MultiBinding类实例并将其设置为Text属性。

Text="{Binding Path=Breadth}" 实例化 Binding类实例并将其设置为Text属性。