2012-04-01 60 views
1

我有以下的TextBlock风格:动态的StringFormat在WPF

<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。样式中的绑定留空,因为我想为所有绑定到不同属性的多个TextBlocks应用相同的样式。触发器正在工作,但StringFormat`被忽略,有什么想法?

+1

这将是一个更容易与转换器 – thumbmunkeys 2012-04-01 13:39:08

回答

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财产。

+0

有道理!有没有办法解决这个问题? – 2012-04-02 16:57:07

+0

看不到@pivotnig提出的方法 - 使用ValueConverter – EvAlex 2012-04-03 09:12:32