Вам нужно использовать DataTriggers
, если вы хотите, чтобы триггеры могли работать с привязками.Проблема в том, что DataTriggers
доступны только для стиля и шаблона, поэтому вам нужно определить один из них следующим образом:
<StackPanel>
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Mode}" Value="1">
<Setter TargetName="txt1" Property="Visibility" Value="Visible" />
<Setter TargetName="txt2" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt3" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Mode}" Value="2">
<Setter TargetName="txt1" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt2" Property="Visibility" Value="Visible" />
<Setter TargetName="txt3" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="TextBlock 1" x:Name="txt1" />
<TextBlock Text="TextBlock 2" x:Name="txt2" />
<TextBlock Text="TextBlock 3" x:Name="txt3" />
</StackPanel>
Другим решением будет использование IValueConverter
, которое преобразует int из Mode
вVisibility
, который вы хотите, и применить его непосредственно к каждому текстовому блоку Visibility
свойство.
Обратите внимание, что ответ Дина Чела остается действительным: вы должны использовать DependencyProperty
или реализовать INotifyPropertyChanged
, если хотитеизменяется на Mode
для запуска.