【问题标题】:WPF Background change of Border OnMouseDownWPF边框OnMouseDown的背景变化
【发布时间】:2011-06-16 03:32:38
【问题描述】:

我正在尝试更改鼠标左键下边框的背景。按钮我不明白。当然,我的渐变有 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>

如果有人看到错误请告诉我;)

【问题讨论】:

    标签: wpf storyboard eventtrigger coloranimation


    【解决方案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>
    

    【讨论】:

    • 谢谢,我发现了错误:如果我也有 MouseLeave-Event,它就不起作用。你认识你吗?
    • @Thomas Spranger:我也尝试添加 MouseLeave 触发器,但它仍在工作,更新了我的答案。您可以添加一些重现该问题的示例代码吗?不然很难说
    • 你也可以添加mouseEnter吗?这就是我的情况!
    • @Thomas Spranger:当然,我现在不在电脑旁,但我会在今晚晚些时候添加它
    • 嗨,Meleak!希望你没有忘记我;)
    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    相关资源
    最近更新 更多