DataTrigger não altera a propriedade Text
Estou tentando usar um gatilho de dados em um estilo para alterar uma propriedade.
Em conformidade com o "Exemplo mínimo, completo e verificável"requisitos ...
Para reproduzir, primeiro crie um aplicativo WPF no Visual Studio.
Dentro do 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;
}
}
Dentro do 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>
Dentro do 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;
}
}
}
Como uma observação lateral - tentei definir o valor do gatilho de dados para apenas"True"
, e isso também não funcionou (o gatilho não foi capturado e o texto não foi alterado com base na configuração da propriedade com um novo valor).
Então, por que o gatilho de dados não está pegando ou funcionando aqui? (Com o recurso estático ou o valor literal)? Ainda mais relevante - por que estou recebendo esse erro? O erro "Depois que um 'DataTrigger' está em uso (selado), não pode ser modificado"? E qual é o método adequado para realizar o que estou tentando fazer aqui? (De preferência, ainda usando um gatilho de dados e não um conversor, pois preciso alternar entre dois valores).