2012-04-01 2 views
1

У меня есть следующие TextBlock Стиль:Dynamic 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}" /> 

Намерение состоит в том, чтобы установить StringFormat в зависимости от связанного имущества IsMetric. Связывание в стиле осталось пустым, потому что я хочу применить тот же стиль для нескольких текстовых блоков, привязанных к различным свойствам. Триггеры работают, но StringFormat` игнорируется, любые идеи?

+1

это было бы намного проще с конвертером – thumbmunkeys

ответ

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

Имеет смысл! Есть ли способ обойти это? –

+0

Невозможно увидеть способ, отличный от предложенного @pivotnig - с помощью ValueConverter – EvAlex

Смежные вопросы