我試圖處理用戶活動和活動在WPF應用程序褪色一些東西進出。經過大量的研究,我決定去(至少在我看來)非常優雅的解決方案Hans Passant發佈了here。WPF活動和活動
這裏只有一個缺點:只要光標停留在窗口頂部,該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版本? – 2011-02-10 23:12:54
@Meleak:謝謝!事實上,它只與上面的代碼一起工作(對我來說是恥辱)。無論如何,在我的項目中,我仍然有這種奇怪的行爲。我正在研究和縮小這一點,並提供更詳細的信息。爲了完整起見,我使用的是.NET 4. – 2011-02-11 09:43:33
@Meleak:我已經更新了這個問題,這樣的行爲實際上是可以理解的。 – 2011-02-11 11:31:34