none
XAML мигание RRS feed

  • Вопрос

  • Создал стиль для кнопки, создал тригер который при наведении бы менял цвет кнопки. Хочу теперь написать код который заставлял бы мигать кнопку  при наведении. 
    10 октября 2011 г. 12:58

Ответы

  • 1. В Expression Blend создаете StoryBoard, и в нем делаете изменение цвета кнопки на нужный, ставите для StoryBoard флаги AutoReverse=True, RepeatBehavior=Forever. StoryBoard помещаем в ресурсы стиля

    2. Делаем тригера. По событию MouseEnter запускаете StoryBoard

    3. По событию MouseLeve останавливаете

    все настраивается в бленде

    Вот пример. Только его надо дополнить! Отредактировать шаблон по умолчанию для кнопки и у Chrome поставить RenderMouseOver=False, иначе работать не будет. Не привожу это в примере, т.к. куча кода ненужного будет.

            <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
                <Style.Resources>
                    <Storyboard x:Key="Storyboard1" AutoReverse="True" RepeatBehavior="Forever">
                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[3].(GradientStop.Color)" Storyboard.TargetName="{x:Null}">
                            <EasingColorKeyFrame KeyTime="0:0:1" Value="#FFF12020"/>
                        </ColorAnimationUsingKeyFrames>
                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)" Storyboard.TargetName="{x:Null}">
                            <EasingColorKeyFrame KeyTime="0:0:1" Value="#FFD49090"/>
                        </ColorAnimationUsingKeyFrames>
                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="{x:Null}">
                            <EasingColorKeyFrame KeyTime="0:0:1" Value="#FFD46161"/>
                        </ColorAnimationUsingKeyFrames>
                    </Storyboard>
                </Style.Resources>
                <Style.Triggers>
                    <EventTrigger RoutedEvent="Mouse.MouseEnter">
                        <BeginStoryboard x:Name="Storyboard1_BeginStoryboard" Storyboard="{StaticResource Storyboard1}"/>
                    </EventTrigger>
                </Style.Triggers>
            </Style>

    • Предложено в качестве ответа Abolmasov Dmitry 10 октября 2011 г. 23:13
    • Помечено в качестве ответа XaverOz 11 октября 2011 г. 12:40
    10 октября 2011 г. 13:36

Все ответы

  • надо в тригере прописать анимацию, вместо setter


    indigo children is coming...
    10 октября 2011 г. 13:25
  • 1. В Expression Blend создаете StoryBoard, и в нем делаете изменение цвета кнопки на нужный, ставите для StoryBoard флаги AutoReverse=True, RepeatBehavior=Forever. StoryBoard помещаем в ресурсы стиля

    2. Делаем тригера. По событию MouseEnter запускаете StoryBoard

    3. По событию MouseLeve останавливаете

    все настраивается в бленде

    Вот пример. Только его надо дополнить! Отредактировать шаблон по умолчанию для кнопки и у Chrome поставить RenderMouseOver=False, иначе работать не будет. Не привожу это в примере, т.к. куча кода ненужного будет.

            <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
                <Style.Resources>
                    <Storyboard x:Key="Storyboard1" AutoReverse="True" RepeatBehavior="Forever">
                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[3].(GradientStop.Color)" Storyboard.TargetName="{x:Null}">
                            <EasingColorKeyFrame KeyTime="0:0:1" Value="#FFF12020"/>
                        </ColorAnimationUsingKeyFrames>
                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)" Storyboard.TargetName="{x:Null}">
                            <EasingColorKeyFrame KeyTime="0:0:1" Value="#FFD49090"/>
                        </ColorAnimationUsingKeyFrames>
                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="{x:Null}">
                            <EasingColorKeyFrame KeyTime="0:0:1" Value="#FFD46161"/>
                        </ColorAnimationUsingKeyFrames>
                    </Storyboard>
                </Style.Resources>
                <Style.Triggers>
                    <EventTrigger RoutedEvent="Mouse.MouseEnter">
                        <BeginStoryboard x:Name="Storyboard1_BeginStoryboard" Storyboard="{StaticResource Storyboard1}"/>
                    </EventTrigger>
                </Style.Triggers>
            </Style>

    • Предложено в качестве ответа Abolmasov Dmitry 10 октября 2011 г. 23:13
    • Помечено в качестве ответа XaverOz 11 октября 2011 г. 12:40
    10 октября 2011 г. 13:36
  • Уважаемый пользователь, пожалуйста, не забудьте отметить сообщение или сообщения, которые являются решением вашей проблемы, даже если это ваше собстевенное сообщение. Это можно сделать с помощью кнопки 'Пометить как ответ', которая есть под каждым сообщением.

    Спасибо.


    Для связи [mail]
    10 октября 2011 г. 23:13