Я реализую решение в классе IdleDetector. Я немного улучшил код. Детектор простоя выбрасывает IsIdle, который может быть перехвачен! Это дает это! Я жду некоторых комментариев.

аюсь справиться с бездействием и активностью пользователя в приложении 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 здесь не очень помог.

Ответы на вопрос(4)

Ваш ответ на вопрос