【问题标题】:Autohide Media Controls SilverLight Player自动隐藏媒体控件 SilverLight 播放器
【发布时间】:2012-02-14 04:06:54
【问题描述】:

我正在尝试让我的媒体控件在 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 使控件隐藏和重新出现。但是,这不起作用,因为 Collapse 似乎使边界对鼠标进入没有响应。

谢谢!

**编辑

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

//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();
}

【问题讨论】:

    标签: c# silverlight xaml controls media-player


    【解决方案1】:

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

    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;
        }
    }
    

    您还需要为取消隐藏执行类似的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      相关资源
      最近更新 更多