我目前正在 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();
}
最佳答案
我做了一个小测试项目来尝试一下并给你一个答案,这就是我所做的:
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/