DispatcherTimer укладка - UWP - PullRequest
0 голосов
/ 23 мая 2018

Сейчас я работаю над проектом в UWP, и у меня есть CommandBar, который я хочу перейти от Hidden до Compact, если мышь двигается.Через пять секунд (если мышь не двигается) CommandBar должен снова вернуться к Hidden.

Я не получаю никаких ошибок, но когда я двигаю мышь, CommandBar сходит с ума, и этопросто мигает с Hidden до Compact, когда я снова перемещаю мышь.Я думаю, проблема в том, что событие OnMouseMovement накладывается на себя.

Это мой код события движения мыши:

public async void OnPointerMoved(object Sender, PointerRoutedEventArgs e)
{
    CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Compact;
    DispatcherTimer ButtonTimer = new DispatcherTimer();
    ButtonTimer.Interval = TimeSpan.FromSeconds(5);
    ButtonTimer.Tick += (sender, args) =>
    {
        CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Hidden;
    };
    ButtonTimer.Start();
}

1 Ответ

0 голосов
/ 23 мая 2018

Я сделал небольшой тестовый проект, чтобы опробовать его и получить ответ, вот что я сделал:

private DispatcherTimer Timer { get; set; }
public MainPage()
{
    this.InitializeComponent();
    CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Hidden;            
    Timer = new DispatcherTimer(){Interval = TimeSpan.FromSeconds(5) };
    Timer.Tick += (sender, args) => { 
        CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Hidden; 
        Timer.Stop();
    };

}

public async void OnPointerMoved(object Sender, PointerRoutedEventArgs e)
{
    Timer.Stop();
    CmdBar.ClosedDisplayMode = AppBarClosedDisplayMode.Compact;
    Timer.Start();            
}

По сути, как сказал @Evk, вы создаете новый таймер при каждом движении вашегомышь.Поэтому я объявил свойство для таймера и остановил его, а затем перезапустил при перемещении мыши.

...