【问题标题】:How to implement that certain buttons appear for a while when I move the mouse and then dissaper if mouse is still?如何实现某些按钮在我移动鼠标时出现一段时间,然后如果鼠标静止则消失?
【发布时间】:2012-01-12 11:03:27
【问题描述】:

我使用MouseMove 事件来检测鼠标移动,因此我可以更改按钮的可见性。鼠标停止移动后,按钮仍然存在,因为我不知道如何以及在哪里计算使这些按钮再次不可见的时间。

这些按钮是全屏视频播放器上的控件,因此也欢迎任何其他想法。

private void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        timer.Stop();

        button1.Visibility = Visibility.Hidden;
        button2.Visibility = Visibility.Hidden;
    }

    private void mediaElement1_MouseMove(object sender, MouseEventArgs e)
    {
        if (!timer.Enabled)
        {
            timer.Enabled = true;
            return;
        }
        if (timer.Enabled)
        {
            timer.Interval = 2000;
            timer.Start();

            button1.Visibility = Visibility.Visible;
            button2.Visibility = Visibility.Visible;

            timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        }
    }

【问题讨论】:

    标签: wpf mousemove


    【解决方案1】:

    最好的办法是使用某种形式的计时器,例如 Timer 类。然后,您可以连接到 Elapsed 事件并使用其中的处理程序来计算经过的时间。一旦达到某个时间阈值,您就可以隐藏按钮。因此,代码步骤的示例如下:

    1. 用户移动鼠标。
    2. 显示按钮。
    3. 用户停止移动鼠标。
    4. 启动计时器。
    5. 计算Timer.Elapsed 事件的时间。
    6. 时间计数达到阈值。
    7. 隐藏按钮并停止计时器。

    【讨论】:

    • 我还是新手,我应该在鼠标停止在 MouseMove 方法内移动时捕获,还是在其他地方捕获?
    • 您可能希望在MouseMove 事件处理程序中实际启动计时器,并在每次进入该方法时重置计时器。我将编辑我的答案以反映这一点。
    • 哦,我刚刚在 MSDN 上找到了 using timer event handler 的明确示例
    • 这意味着我应该创建一个计时器作为类的成员,而不是作为 MouseMove 处理程序的成员(谈到每次重置计时器)?
    • @HomeMade 是的,这是正确的。请参阅我编辑的答案,以获得一个非常粗略的图表,说明您应该遵循的过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多