自动隐藏媒体控制SilverLight播放器

本文关键字:SilverLight 播放器 控制 媒体 隐藏 | 更新日期: 2023-09-27 18:20:52

我正在尝试让媒体控件在2秒钟后自动隐藏。然而,我设置它的方式是,只有当我的鼠标离开我有媒体控件的StackPanel时,它才会工作。如果我一直在StackPanel中移动,那么它会开始闪烁,因为它会多次触发隐藏。我不确定如何从逻辑上解决这个问题。有人有什么建议吗?

这是我现在得到的(StackPanel被命名为控件)。

...
controls.MouseMove += new MouseEventHandler(control_unhide);
controls.MouseLeave += new MouseEventHandler(control_hide);
...
void control_hide(object sender, MouseEventArgs e)
{
    var miniTimer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(2) };
    miniTimer.Tick += (s, i) => { miniTimer.Stop(); controls.Opacity = 0; };
    miniTimer.Start();
}
//Unhide controls
void control_unhide(object sender, MouseEventArgs e)
{
    controls.Opacity = 100;
}

此外,在我看到的一些示例代码中,有人说要使用Collapse和Visible来隐藏和重新显示控件。然而,这并不起作用,因为"塌陷"似乎会使边界对鼠标进入没有响应。

谢谢!

**编辑

我问这个问题是因为我昨天花了很多时间试图弄清楚这个问题,但今天却坐下来想一个非常简单的解决方案。我做的是:

//global
private DispatcherTimer hideTimer;
....
//init
hideTimer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(2) };
hideTimer.Tick += (s, i) => { hideTimer.Stop(); controls.Opacity = 0; };
hideTimer.Start();
controls.MouseMove += new MouseEventHandler(control_unhide);
controls.MouseLeave += new MouseEventHandler(control_hide);
...

void control_hide(object sender, MouseEventArgs e)
{
    hideTimer.Start();
}
//Unhide controls
void control_unhide(object sender, MouseEventArgs e)
{
   controls.Opacity = 100;
   hideTimer.Stop();
}

自动隐藏媒体控制SilverLight播放器

一个简单的解决方案是放入一个保护变量,并且只有在当前没有隐藏时才隐藏:

bool currentlyHiding;
void control_hide(object sender, MouseEventArgs e)
{
    if (!currentlyHiding)
    {
        var miniTimer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(2) };
        miniTimer.Tick += (s, i) =>
            {
                 miniTimer.Stop();
                 controls.Opacity = 0;
                 currentlyHiding = false;
            };
        miniTimer.Start();
        currentlyHiding = true;
    }
}

你还需要为取消隐藏做一些类似的事情。