Sto cercando di gestire l'inattività e l'attività dell'utente in un'applicazione WPF per sbiadire alcune cose dentro e fuori. Dopo molte ricerche, ho deciso di andare con la soluzione molto elegante (almeno secondo me) di Hans Passant con il here.Inattività e attività WPF
C'è solo uno svantaggio: finché il cursore rimane in cima alla finestra, l'evento PreProcessInput
viene continuamente attivato. Sto avendo un'applicazione a schermo intero, quindi questo lo uccide. Qualsiasi idea su come ignorare questo comportamento sarebbe molto apprezzata.
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();
}
}
Aggiorna
ho potuto restringere il comportamento descritto meglio (vedi l'aggiornamento rectangle1.Visibility
nel codice precedente). Finché il cursore si trova in cima alla finestra e ad esempio viene modificato Visibility
di un controllo, viene sollevato il numero PreProcessInput
. Forse sto fraintendendo lo scopo dell'evento PreProcessInput
e quando si attiva. MSDN non è stato molto utile qui.
Questo codice funziona perfettamente per me e 'PreProcessInput' non viene generato quando il mouse si trova ancora su' Window'. Hai lo stesso effetto se crei una piccola app con solo il codice che hai postato? Quale versione .NET stai usando? –
@Meleak: Grazie!Effettivamente, funziona con il codice appena sopra (vergogna su di me). Ad ogni modo, nel mio progetto ho ancora uno strano comportamento. Sto ricercando e restringendo ulteriormente questo aspetto e fornirò informazioni più dettagliate. Per completezza, sto usando .NET 4. –
@Meleak: Ho aggiornato la domanda in modo che il comportamento sia effettivamente comprensibile. –