Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动隐藏媒体控件SilverLight Player_C#_Silverlight_Xaml_Controls_Media Player - Fatal编程技术网

C# 自动隐藏媒体控件SilverLight Player

C# 自动隐藏媒体控件SilverLight Player,c#,silverlight,xaml,controls,media-player,C#,Silverlight,Xaml,Controls,Media Player,我正在尝试使媒体控件在2秒后自动隐藏。然而,我设置它的方式是,它只在我的鼠标离开StackPanel时工作,我有媒体控件。如果我继续在StackPanel中来回移动,那么当它多次触发隐藏时,它将开始闪烁。我不确定如何合乎逻辑地进行这项工作。有人有什么建议吗 下面是我现在得到的(StackPanel名为controls) 另外,从一些示例代码中,我看到有人说使用Collapse和Visible来隐藏和重新显示控件。但是,这不起作用,因为塌陷似乎使边界对鼠标进入没有反应 谢谢 **编辑 我问这个问题

我正在尝试使媒体控件在2秒后自动隐藏。然而,我设置它的方式是,它只在我的鼠标离开StackPanel时工作,我有媒体控件。如果我继续在StackPanel中来回移动,那么当它多次触发隐藏时,它将开始闪烁。我不确定如何合乎逻辑地进行这项工作。有人有什么建议吗

下面是我现在得到的(StackPanel名为controls)

另外,从一些示例代码中,我看到有人说使用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();
}

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

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

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

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

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;
    }
}
您还需要为取消隐藏执行类似的操作