Кнопка пульсирования C # WPF

#c# #wpf

#c# #wpf

Вопрос:

Мне нужна помощь, чтобы выяснить, как заставить кнопку пульсировать цветом фона. Я использую приведенный ниже стиль для создания кнопок и хотел бы, чтобы цвет фона кнопок пульсировал (разные оттенки цвета) в нормальном состоянии. Цель состоит в том, чтобы привлечь внимание пользователей к кнопке.

В идеале я бы хотел, чтобы это произошло после определенного периода бездействия. Возможно ли это сделать в стиле или мне нужно создать полный пользовательский пользовательский элемент управления? Если это возможно, я был бы признателен, если бы кто-нибудь мог предоставить пример кода, иллюстрирующий, как этого добиться.

Я считаю, что должно быть возможно сделать следующее: 1. Создайте ControlTemplate.Раздел ресурсов и добавьте раскадровку, которая определяет анимацию, которая будет использоваться.
1.1 Как будет выглядеть раскадровка и как она соотносится с фактическими цветами фона кнопки 1.2 Как можно добавить задержку к началу раскадровки (чтобы она запускалась только после периода бездействия (т. Е. Без нажатия на кнопку) 2. Каким-то образом добавьте триггер для запуска раскадровки. как это сделать для нормального состояния кнопки.

 <Style x:Key="ContinueButton" TargetType="{x:Type Button}">
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Padding" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid x:Name="grid">
                    <Border x:Name="border" CornerRadius="0" BorderBrush="{StaticResource ThemeSolidColorBrushGreen}" BorderThickness="2" Background="{StaticResource ThemeSolidColorBrushGreen}">

                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" TextElement.Foreground="White" 
                                          TextElement.FontSize="{Binding Source={StaticResource settingsProvider}, Path=Default.FontSizeParagraph}" TextElement.FontFamily="{Binding Source={StaticResource settingsProvider}, Path=Default.FontFamily}" TextElement.FontWeight="Bold"></ContentPresenter>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>

                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" TargetName="border" Value="{StaticResource ThemeSolidColorBrushGreen}">

                        </Setter>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">

                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Opacity" TargetName="grid" Value="0.25"/>
                    </Trigger>

                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
  

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

1. Анимация msdn.microsoft.com/en-us/library/ms752312 (v = против 110).aspx

Ответ №1:

Для достижения этой цели вы можете использовать EventTrigger. Просто замените ControlTemplate.Запустите раздел вашего кода следующим кодом

                           <ControlTemplate.Triggers>
                                <EventTrigger RoutedEvent="Button.MouseEnter">
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ColorAnimation  Storyboard.TargetName="border" AutoReverse="True"  
                                                             Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
                                                             To="Blue" RepeatBehavior="Forever" Duration="0:0:1"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                                <Trigger Property="IsPressed" Value="True">
                                    <Setter Property="Background" TargetName="border" Value="GreenYellow"/>
                                </Trigger>
                                <!--<Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Background" TargetName="border" Value="Gray"/>
                                </Trigger>-->
                                <Trigger Property="IsEnabled" Value="False">
                                    <Setter Property="Opacity" TargetName="grid" Value="0.25"/>
                                </Trigger>

                            </ControlTemplate.Triggers>