c# - 如何只在鼠标悬停很长时间时才触发wpf动画?

标签 c# .net wpf wpf-animation

我是 WPF 动画的新手。

我有一个带有 4 个按钮的 wpf 应用程序。这 4 个按钮具有动画,其中按钮的不透明度从 0.0 变为 1.0,当鼠标悬停在该按钮上时会触发动画。

我面临的问题是,即使鼠标在其他按钮上滑动几分之一秒,这些按钮的动画也会被触发。

有什么方法可以让我仅在鼠标在按钮上停留至少一秒钟时才触发动画?

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="22.5*"/>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="22.5*"/>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="22.5*"/>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="22.5*"/>
        <ColumnDefinition Width="2*"/>
    </Grid.ColumnDefinitions>
    <Button x:Name="Button1" Grid.Column="1" Content="Button 1">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation From="0.0" To="1.0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Button1" Duration="0:0:1"></DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
    <Button x:Name="Button2" Grid.Column="3" Content="Button2">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation From="0.0" To="1.0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Button2" Duration="0:0:1"></DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
    <Button x:Name="Button3" Grid.Column="5" Content="Button 3">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation From="0.0" To="1.0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Button3" Duration="0:0:1"></DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>

    <Button x:Name="Button4" Grid.Column="7" Content="Button 4">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation From="0.0" To="1.0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Button4" Duration="0:0:1"></DoubleAnimation>
                    </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
    </Button>
    </Grid>

提前致谢

最佳答案

我认为这不是您可以在 XAML 中执行的操作。在代码中它看起来像这样:

XAML

<Button Width="50" Height="50" Name="MyButton"> </Button>

代码

public partial class MainWindow : Window
    {
        private DispatcherTimer timer;
        private DoubleAnimation animation;
        private Storyboard sb;

        public MainWindow()
        {
            InitializeComponent();

            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += timer_Tick;

            MyButton.MouseEnter += (sender, e) =>
                {
                    timer.Start();
                };

            MyButton.MouseLeave += (sender, e) =>
                {
                    timer.Stop();
                };

            animation = new DoubleAnimation();
            animation.From = 1;
            animation.To = 0;
            animation.Duration = new Duration(TimeSpan.FromMilliseconds(1000));

            Storyboard.SetTarget(animation, MyButton);
            Storyboard.SetTargetProperty( animation, new PropertyPath(OpacityProperty));

            sb = new Storyboard();
            sb.Children.Add(animation);
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            sb.Begin();
        }
    }

关于c# - 如何只在鼠标悬停很长时间时才触发wpf动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27537305/

相关文章:

c# - 使用扩展方法中定义的查询进行单元测试

C# SQLCommand 不将数据写入数据库

c# - 带小数点的文本框显示格式

c# - 无法验证网站,禁止访问

.net 3.5 : To read connectionstring from app. 配置?

c# - 如何将 ObservableCollection<T> 绑定(bind)到 WrapPanel?

c# - 根据 GET 请求为 ASP.NET MVC 自定义模型绑定(bind)器

c# - 找出两个字符串是否模糊的最快方法是什么? [不是另一个 Levenshtein 帖子]

c# - WPF 中使用 SkiaSharp 实现模糊文本

wpf - 坚持到StackPanel的底部