2012-04-23 5 views
0

У меня есть следующий шаблон для некоторого заголовка:Условное форматирование содержимого заголовка

<telerik:RadExpander.Header> 
    <StackPanel Orientation="Horizontal" DataContext="{Binding CurrentItem, ElementName=activityProductGrid}"> 
     <TextBlock Text="{Binding Strings[Product], Source={StaticResource LanguageResources}, StringFormat='{}{0}: '}" /> 
     <TextBlock Text="{Binding Product.Name}" FontWeight="Bold" /> 
     <TextBlock Text="{Binding Strings[GroupName], Source={StaticResource LanguageResources}, StringFormat=', {0}: '}" /> 
     <TextBlock Text="{Binding GroupName}" /> 
     <TextBlock Text="{Binding Strings[UnitPrice], Source={StaticResource LanguageResources}, StringFormat=', {0}: '}" /> 
     <TextBlock Text="{Binding UnitPrice}" /> 
    </StackPanel> 
</telerik:RadExpander.Header> 

Как я могу сделать условное formmatting заголовка, если, например, продукт == NULL, то заголовок не должен ничего показывать?

Редактировать: Это работает.

<StackPanel Orientation="Horizontal" DataContext="{Binding CurrentItem, ElementName=activityProductGrid}"> 
    <i:Interaction.Triggers> 
     <ie:DataTrigger Binding="{Binding}" Value="{x:Null}"> 
      <ie:ChangePropertyAction TargetObject="{RelativeSource={RelativeSource AncestorType=StackPanel}}" PropertyName="Visibility"> 
       <ie:ChangePropertyAction.Value> 
        <Visibility>Collapsed</Visibility> 
       </ie:ChangePropertyAction.Value> 
      </ie:ChangePropertyAction> 
     </ie:DataTrigger> 
    </i:Interaction.Triggers> 

    <-- from this point the came code as above --> 
</StackPanel> 

ответ

0

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

<TextBlock 
    Text="{Binding Product.Name, TargetNullValue=(empty), FallbackValue=(error)}"/> 

(Taken из WPF Binding Cheatsheet)

EDIT: Я заметил, что вы не просто хотите, чтобы конкретная привязка имела другое значение, но весь элемент управления не отображался. Для этого вы можете использовать стили и триггеры, выкидывая DataTrigger в свой Product объект и устанавливая Visibility, если он равен нулю.

<telerik:RadExpander.Header> 
    <StackPanel> 
      <StackPanel.Style> 
       <Style TargetType="StackPanel"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Product}" Value="{x:Null}"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
        </DataTrigger> 
       </Style.Triggers> 
       </Style> 
      </StackPanel.Style> 
     </StackPanel> 
</telerik:RadExpander.Header> 
+0

Hi Avner, я пробовал что-то подобное, и оно не работает. Мне нужно решение как для Silverlight, так и для WPF, и я отредактирую сообщение, чтобы дать вам то, что я попробовал – Goran

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