我目前正在UWP中的项目上工作,如果鼠标移动,我想将CommandBarHidden转到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();
}

最佳答案

我做了一个小测试项目来尝试并得到答案,这就是我所做的:

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所说的那样,鼠标的每一步都在创建一个新的计时器。因此,我为计时器声明了一个属性,然后停止它,然后在鼠标移动时重新启动它。

关于c# - DispatcherTimer堆栈-UWP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50482683/

10-13 07:05