Изменение стиля текстового блока при изменении значения другого текстового блока

#c# #wpf #xaml #datatrigger

#c# #wpf #xaml #datatrigger

Вопрос:

Я пытаюсь изменить стиль другого текстового блока при изменении определенного текстового блока. Я пытаюсь использовать datatrigger. Это правильный путь? и вот мой код.

     </TextBlock>
    <TextBlock Name="txtChangeTo" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="48" Text="2">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=txtChange, Path=Text, UpdateSourceTrigger=PropertyChanged}"  Value="">
                        <Setter Property="FontWeight" Value="Bold" />
                        <Setter Property="Foreground" Value="red"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    <Button x:Name="btnChangeValue" Content="Change Value" Click="btnChangeValue_Click"></Button>
</StackPanel>
  

Спасибо.

Комментарии:

1. Привет, мне это кажется хорошим, за исключением текстового поля, к которому вы привязываетесь, отсутствует. Итак, первая строка должна быть чем-то вроде <TextBox x:Name="txtChange"/> . Также в вашем примере стиль применяется, когда текст текстового блока пуст, поэтому вы его не увидите.

Ответ №1:

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