Благодарю. У меня нет времени на тестирование прямо сейчас, но у меня будет завтра, и если это сработает, я отмечу ваш ответ правильно.

аюсь использовать триггер данных для стиля, чтобы изменить свойство.

В соответствии сМинимальный, полный и проверяемый пример" требования...

Для воспроизведения сначала создайте приложение WPF в Visual Studio.

В App.xaml.cs:

using System.ComponentModel;
using System.Windows;

namespace Foo{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application, INotifyPropertyChanged {
        private bool _clicked;
        public bool Clicked {
            get { return this._clicked; }
            set {
                this._clicked = value;
                this.PropertyChanged?.Invoke(
                    this, new PropertyChangedEventArgs( "Clicked" ) );
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
}

Внутри MainWindow.xaml:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:lib="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:Foo"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    mc:Ignorable="d" x:Class="Foo.MainWindow"
    Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <lib:Boolean x:Key="True">True</lib:Boolean>
    </Window.Resources>
    <Grid>
        <Button x:Name="button" Click="button_Click">
            <Viewbox>
                <TextBlock Text="Unclicked">
                    <TextBlock.Style>
                        <Style TargetType="{x:Type TextBlock}">
                            <Style.Triggers>
                                <DataTrigger
                                        Binding="{Binding
                                            Clicked,
                                            Source={x:Static Application.Current}}"
                                            Value="{StaticResource True}">
                                    <Setter Property="Text" Value="Clicked" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
            </Viewbox>
        </Button>
    </Grid>
</Window>

Внутри MainWindow.xaml.cs -

using System.Windows;

namespace Foo{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
        public MainWindow( ) {
            InitializeComponent( );
        }

        private void button_Click( object sender, RoutedEventArgs e ) {
            ( Application.Current as App ).Clicked = !( Application.Current as App ).Clicked;
        }
    }
}

Как примечание - я попытался установить значение триггера данных просто"True"и это тоже не сработало (триггер не перехватил, а текст не изменился в зависимости от установки для свойства нового значения).

Так почему триггер данных здесь не ловит или не работает? (Либо со статическим ресурсом, либо с буквальным значением)? Еще более актуально - почему я получаю эту ошибку? Ошибка «После использования DataTrigger (запечатанный) не может быть изменена»? И каков правильный метод выполнения того, что я пытаюсь сделать здесь? (Желательно по-прежнему использовать триггер данных, а не конвертер, поскольку мне нужно переключаться между двумя значениями).

Ответы на вопрос(1)

Ваш ответ на вопрос