自动隐藏媒体控制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();
}
一个简单的解决方案是放入一个保护变量,并且只有在当前没有隐藏时才隐藏:
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;
}
}
你还需要为取消隐藏做一些类似的事情。