2013-10-12 6 views
1

Я пытаюсь условно форматировать текстовый блок в зависимости от свойства Text, но я не могу заставить его работать:Условный стиль на основе свойства TextBlock.Text?

<Style x:Key="StatusEnumTextStyle" TargetType="TextBlock" > 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Text}" Value="InProgress"> 
      <Setter Property="Foreground" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

<TextBlock Text="InProgress" Style="{StaticResource StatusEnumTextStyle}"/> 

Но я получаю ошибку связывания:

System.Windows.Data Error: 40 : BindingExpression path error: 'Text' property not found on 'object' ''NotifierViewModel' (HashCode=43600526)'. BindingExpression:Path=Text; DataItem='VM' (HashCode=43600526); target element is 'TextBlock' (Name=''); target property is 'NoTarget' (type 'Object') 

Ну я вижу что триггер пытается получить String.Text, но как я могу использовать свойство TextBlock для моего триггера?

Фон: В принципе, я хочу условный стиль, основанный на Enum, называемый «StatusEnum», но не зависящий от меняющегося имени переменной, поскольку мне нужны были два одинаковых стиля, если бы вы ожидали переменную, называемую «CurrentStatusEnum», а другую, если var name будет другим, например, «NewStatusEnum». Прибегая к сопоставлению свойство как «Текст» позволит мне использовать тот же стиль, когда я когда-либо использовать TextBlock

ответ

2

Обновить ваш DataTrigger Binding, как показано ниже:

<Style.Triggers> 
    <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="InProgress"> 
     <Setter Property="Foreground" Value="Red" /> 
    </DataTrigger> 
</Style.Triggers> 
Смежные вопросы