【发布时间】:2011-02-10 21:47:32
【问题描述】:
我正在尝试处理 WPF 应用程序中的用户不活动和活动以淡入淡出一些内容。经过大量研究,我决定采用(至少在我看来)Hans Passant 发布的非常优雅的解决方案 here。
只有一个缺点:只要光标停留在窗口顶部,PreProcessInput 事件就会持续触发。我有一个全屏应用程序,所以这会杀死它。任何我如何绕过这种行为的想法都将不胜感激。
public partial class MainWindow : Window
{
readonly DispatcherTimer activityTimer;
public MainWindow()
{
InitializeComponent();
InputManager.Current.PreProcessInput += Activity;
activityTimer = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(10),
IsEnabled = true
};
activityTimer.Tick += Inactivity;
}
void Inactivity(object sender, EventArgs e)
{
rectangle1.Visibility = Visibility.Hidden; // Update
// Console.WriteLine("INACTIVE " + DateTime.Now.Ticks);
}
void Activity(object sender, PreProcessInputEventArgs e)
{
rectangle1.Visibility = Visibility.Visible; // Update
// Console.WriteLine("ACTIVE " + DateTime.Now.Ticks);
activityTimer.Stop();
activityTimer.Start();
}
}
更新
我可以更好地缩小所描述的行为(请参阅上述代码中的 rectangle1.Visibility 更新)。只要光标停留在窗口顶部并且例如更改控件的Visibility,就会引发PreProcessInput。也许我误解了PreProcessInput 事件的目的以及它何时触发。 MSDN 在这里不是很有帮助。
【问题讨论】:
-
该代码对我来说非常有用,并且当鼠标仍在
Window上时不会引发PreProcessInput。如果您只使用您发布的代码创建一个小应用程序,您会获得相同的效果吗?您使用的是哪个 .NET 版本? -
@Meleak:谢谢!事实上,它只适用于上面的代码(我感到羞耻)。无论如何,在我的项目中,我仍然有那种奇怪的行为。我正在研究和缩小范围,并将提供更详细的信息。为了完整起见,我使用的是 .NET 4。
-
@Meleak:我已经更新了问题,以便实际理解行为。