2015-01-28 3 views
4

Возможно ли в XAML определить несколько Run внутри Style сеттер?Элементы множественного запуска в WPF Style setter

Ниже два Run «S определены и не:

Свойство 'Value' установлено более одного раза.

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="Text"> 
        <Setter.Value> 
         <Run Text="{Binding SelectedItem.iso}"/> 
         <Run Text="{Binding SelectedItem.value}"/> 
        </Setter.Value> 
       </Setter> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SelectedItem.type}" Value={x:Null}"> 
         <Setter Property="Text" Value="No value" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Можно ли это исправить, сохраняя при этом использование многоразовых Run-х?

+0

Это не сработает, даже если Style Setter примет несколько значений. В нескольких записях не задано свойство Text для блока TextBlock, а вместо этого свойство 'Inlines'. Тем не менее, 'Inlines' не является свойством зависимостей и поэтому не может быть установлен с помощью Style Setter. – Clemens

+0

Отъезд: http://stackoverflow.com/questions/11197474/textblock-style-triggers У этого есть два варианта, доступные для вас. –

ответ

2

Сеттер работает с одним свойством, поэтому он может иметь только одно значение, ошибка, которую вы получаете, логична: у нее нет способа понять, что вы пытаетесь сделать, она может просто ... установить свойство заданное значение.

Итак, идея состоит в том, чтобы придать ему такое значение, как должно быть: прилагаемые тексты. Чтобы сделать это, вы будете использовать MultiBinding, который принимает несколько значений и возвращает их как один, в зависимости от StringFormat вы даете ему:

<Setter.Value> 
    <MultiBinding StringFormat="{}{0}{1}{2}"><!-- Format as you wish --> 
     <Binding Path="SelectedItem.iso"/> 
     <Binding Source="{x:Static System:Environment.NewLine}"/> 
     <Binding Path="SelectedItem.value"/> 
    </MultiBinding> 
</Setter.Value> 

Примечание по StringFormat: Вы должны использовать {} при запуске, чтобы избежать брекеты, иначе он будет рассматривать их как стартеры расширения разметки.