C# 自动隐藏媒体控件SilverLight Player
我正在尝试使媒体控件在2秒后自动隐藏。然而,我设置它的方式是,它只在我的鼠标离开StackPanel时工作,我有媒体控件。如果我继续在StackPanel中来回移动,那么当它多次触发隐藏时,它将开始闪烁。我不确定如何合乎逻辑地进行这项工作。有人有什么建议吗 下面是我现在得到的(StackPanel名为controls) 另外,从一些示例代码中,我看到有人说使用Collapse和Visible来隐藏和重新显示控件。但是,这不起作用,因为塌陷似乎使边界对鼠标进入没有反应 谢谢 **编辑 我问这个问题是因为我昨天花了很多时间想弄明白,今天却坐下来想一个非常简单的解决办法。我所做的是:C# 自动隐藏媒体控件SilverLight Player,c#,silverlight,xaml,controls,media-player,C#,Silverlight,Xaml,Controls,Media Player,我正在尝试使媒体控件在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;
}
}
您还需要为取消隐藏执行类似的操作