единственное, что мне приходит в голову, это если бы я был на вашем месте, я просто создал бы триггер данных на стороне xaml следующим образом:
<Button x:Name="btn" Height="30" Margin="0,5,0,0">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Green" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ButtonPressed, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="True">
<Setter TargetName="bd" Property="Background" Value="Purple" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
, затем я бы создал свойство:
private bool _buttonPressed;
public bool ButtonPressed
{
get
{
return _buttonPressed;
}
set
{
if (_buttonPressed != value)
{
_buttonPressed = value;
OnPropertyChanged(nameof(ButtonPressed));
}
}
}
и в том месте, где вы собираетесь вызвать это событие, я просто изменил бы наше состояние логического значения
var invokeProv = (IInvokeProvider)(new ButtonAutomationPeer(ButtonHome).GetPattern(PatternInterface.Invoke));
invokeProv?.Invoke();
ButtonHome.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
ButtonPressed = true;
Вещи, о которых вы должны помнить в этом решении:
Реализация интерфейса INotifyPropertyChanged,
Убедитесь, что ваш шаблон кнопки может получить доступ к тексту данных, где создается наше свойство, например, I 'Я установил RelativeSource для типа предка Window, который, на мой взгляд, не является обязательным.Вы можете сделать это лучше и быстрее.
Если есть лучшее решение для повышения визуального состояния элементов пользовательского интерфейса, я бы хотел узнать об этом!С уважением.