按下按钮时更好的逻辑循环方式?

时间:2012-11-25 19:05:10

标签: windows-runtime winrt-xaml winrt-async

所以我在WinRT UserControl上有一个按钮,我想按住按钮时增加或减少一个整数值(CurrentValue)。

我最终得到了下面的这个实现,它有效,但看起来不好或者没关系?

我搜索了一个要使用的事件,但是我在使用click并设置button.clickmode按下时卡住了。

我使用bool _increasePushed跟踪是否已经推入,所以我没有得到多个事件触发器。

    private bool _increasePushed;
    private const int PushDelay = 200;

    private async void ButtonIncreaseClick(object sender, RoutedEventArgs e)
    {
        var button = sender as Button;
        if (button == null) return;

        if (_increasePushed)
        {
            return;
        }

        _increasePushed = true;

        while (button.IsPressed)
        {
            CurrentValue++;
            await Task.Delay(PushDelay);
        }

        _increasePushed = false;
    }

UserControl上的XAML

    <Button x:Name="buttonIncrease" Content="Bla bla"
            Click="ButtonIncreaseClick" ClickMode="Press" />

1 个答案:

答案 0 :(得分:2)

更好的方法是使用RepeatButton,它正是您尝试复制的内容。它有一个Delay属性来等待第一次重复单击,以及一个Interval属性来控制Click事件的引发频率。