Изменение фона WPF для Border OnMouseDown

Я пытаюсь изменить фон границы на левую кнопку мыши. Кнопка Я не понимаю. Конечно, мой градиент имеет 3 стопа.

Триггер события:

<EventTrigger  RoutedEvent="UIElement.PreviewMouseLeftButtonDown" SourceName="border">
    <BeginStoryboard x:Name="MouseDown_BeginStoryboard" Storyboard="{StaticResource OnMouseDown}"/>
</EventTrigger>

Раскадровка:

<Storyboard x:Key="OnMouseDown">
    <ColorAnimation Duration="0:0:0.15" Storyboard.TargetName="border" Storyboard.TargetProperty="Background.GradientStops[0].Color" To="Red" />
    <ColorAnimation Duration="0:0:0.15" Storyboard.TargetName="border" Storyboard.TargetProperty="Background.GradientStops[1].Color" To="Red" />
    <ColorAnimation Duration="0:0:0.15" Storyboard.TargetName="border" Storyboard.TargetProperty="Background.GradientStops[2].Color" To="Red" />
</Storyboard>

Если кто-то увидит ошибку, пожалуйста, сообщите мне;)


person freakinpenguin    schedule 26.01.2011    source источник


Ответы (1)


Я не вижу никаких очевидных ошибок, и пример проекта, который я создал с использованием опубликованного вами кода, работает просто отлично. Может быть, вы можете использовать его, чтобы найти источник вашей проблемы

<Window.Resources>
    <Storyboard x:Key="OnMouseDown">
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[0].Color"
                        To="Red" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[1].Color"
                        To="Red" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[2].Color"
                        To="Red" />
    </Storyboard>
</Window.Resources>
<Grid>
    <Border Name="border">
        <Border.Background>
            <LinearGradientBrush>
                <GradientStop Color="Red" Offset="0"/>
                <GradientStop Color="Green" Offset="0.5"/>
                <GradientStop Color="Blue" Offset="1.0"/>
            </LinearGradientBrush>
        </Border.Background>
        <Border.Triggers>
            <EventTrigger RoutedEvent="PreviewMouseLeftButtonDown"
                          SourceName="border">
                <BeginStoryboard x:Name="MouseDown_BeginStoryboard"
                                 Storyboard="{StaticResource OnMouseDown}"/>
            </EventTrigger>
        </Border.Triggers>
    </Border>
</Grid>

Обновить

Я также попытался добавить событие MouseLeave, и оно все еще работает.

Обновление 2

Добавлен ввод с помощью мыши

<Window.Resources>
    <Storyboard x:Key="OnMouseDown">
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[0].Color"
                        To="Red" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[1].Color"
                        To="Red" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[2].Color"
                        To="Red" />
    </Storyboard>
    <Storyboard x:Key="OnMouseLeave">
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[0].Color"
                        To="Blue" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[1].Color"
                        To="Blue" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[2].Color"
                        To="Blue" />
    </Storyboard>
    <Storyboard x:Key="OnMouseEnter">
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[0].Color"
                        To="Green" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[1].Color"
                        To="Green" />
        <ColorAnimation Duration="0:0:0.15"
                        Storyboard.TargetName="border"
                        Storyboard.TargetProperty="Background.GradientStops[2].Color"
                        To="Green" />
    </Storyboard>
</Window.Resources>
<Grid>
    <Border Name="border">
        <Border.Background>
            <LinearGradientBrush>
                <GradientStop Color="Red" Offset="0"/>
                <GradientStop Color="Green" Offset="0.5"/>
                <GradientStop Color="Blue" Offset="1.0"/>
            </LinearGradientBrush>
        </Border.Background>
        <Border.Triggers>
            <EventTrigger RoutedEvent="PreviewMouseLeftButtonDown" SourceName="border">
                <BeginStoryboard x:Name="MouseDown_BeginStoryboard" Storyboard="{StaticResource OnMouseDown}"/>
            </EventTrigger>
            <EventTrigger RoutedEvent="MouseLeave" SourceName="border">
                <BeginStoryboard x:Name="MouseLeave_BeginStoryboard" Storyboard="{StaticResource OnMouseLeave}"/>
            </EventTrigger>
            <EventTrigger RoutedEvent="MouseEnter" SourceName="border">
                <BeginStoryboard x:Name="MouseEnter_BeginStoryboard" Storyboard="{StaticResource OnMouseEnter}"/>
            </EventTrigger>
        </Border.Triggers>
    </Border>
</Grid>
person Fredrik Hedblad    schedule 26.01.2011
comment
Спасибо, я нашел ошибку: это не работает, если у меня также есть MouseLeave-Event. Ты знаешь ю? - person freakinpenguin; 27.01.2011
comment
@Thomas Spranger: я также пытался добавить триггер MouseLeave, и он все еще работает, обновил свой ответ. Можете ли вы добавить пример кода, воспроизводящий эту проблему? Иначе сложно сказать - person Fredrik Hedblad; 27.01.2011
comment
Не могли бы вы добавить также mouseEnter, пожалуйста? Это мой случай! - person freakinpenguin; 27.01.2011
comment
@Thomas Spranger: Конечно, я сейчас не за своим компьютером, но я добавлю его позже сегодня вечером. - person Fredrik Hedblad; 27.01.2011
comment
Привет Мелеак! Надеюсь, вы меня не забыли ;) - person freakinpenguin; 29.01.2011
comment
@Thomas Spranger: добавлено MouseEnter - person Fredrik Hedblad; 29.01.2011
comment
Хорошо, это работает! Я действительно не знаю, что было не так в моем решении. Спасибо за помощь в любом случае :) - person freakinpenguin; 29.01.2011