У меня есть проект, в котором я ввел триггер для кнопки, которая меняла цвет фона кнопки, когда мышь наводит на нее курсор.
Вот как это выглядит:
<Window.Resources>
<Style x:Key="ButtonStyleDefault" TargetType="{x:Type Button}">
<Setter Property="Background" Value="White"/>
<Setter Property="Margin" Value="1.8"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="FontWeight" Value="DemiBold"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderThickness="1" BorderBrush="DarkGray">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightGray"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
У меня нет проблем с этим, и он работает, как ожидалось. Эти кнопки являются частью цифровой клавиатуры, поэтому тот же эффект должен произойти, когда я нажимаю цифровую клавишу на клавиатуре.
Эта функция отвечает за применение этого эффекта к кнопке
private async void HandleButtonEffects(Button button)
{
if (button is null) {
return;
}
button.Background = new SolidColorBrush(Colors.LightGray);
await Task.Delay(80)
.ConfigureAwait(true);
button.Background = new SolidColorBrush(Colors.LightGray);
}
Это тоже отлично работает. Проблема в том, что триггер перестает работать и зависание кнопки не будет иметь никакого эффекта. Я предполагаю, что триггер каким-то образом является дочерним по отношению к свойству Background, и, переопределяя его, я также переопределяю триггер.
Я мог бы получить производные от кнопки и создать функцию publi c что имитирует зависание и вызывает это из функции HandleButtoneEffect
? Но я бы хотел как можно больше этого избежать
Как мне решить эту проблему?