【发布时间】: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