Удерживайте кнопку, чтобы повторить команды

У меня есть кнопка в моем проекте WPF, и я хочу, чтобы она выполняла одну и ту же команду снова и снова, когда я удерживаю кнопку нажатой. Я мог бы использовать RepeatButton, но я бы предпочел, чтобы команда выполнялась снова, как только она будет выполнена (в своей собственной Задаче), вместо того, чтобы полагаться на свойства задержки и интервала элемента управления RepeatButton.

Я не возражаю против создания метода нажатия кнопки, но действие команды выполняется долго, и время выполнения будет зависеть от значения ExecuteParameter (в этом случае кортеж типа double, представляющий физическую позицию машины).

XAML:

<Button FontFamily="Marlett" FontSize="40" Content="5" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="100" Width="100" Height="50"                            
        Command="{Binding IncrBAnglePos}" 
        CommandParameter="{Binding ElementName=slider, Path=Value}">
</Button>

C#:

SystemCommands.AddSubSystemCommand(SystemRef, CommandNames.IncrAngle, new RelayCommand(             
        o => 
        {
            double AngleIncr = (double)o > 5 ? 5 : (double)o;
            double nextX = MotionControl.LiveX;
            double nextB = MotionControl.LiveB + AngleIncr;
            nextB = nextB >= 45 ? 45 : nextB;       
                Task.Run(() =>  
                {
                    SystemCommands.ExecuteCommand(CommandNames.GotoPosition, new Tuple<double,double>(nextX, nextB));
                });
        },       
        _ => 
        {
            if (MotionControl == null)
                return false;
            return !MotionControl.InMotionCheckStatus;
        }));
if (MotionControl != null)
{
    MotionControl.MotionChanged += SystemCommands.GetRelayCommand(CommandNames.IncrAngle).CanExecutePropertyChangedNotification;
}

Обновление: я вижу, что несколько человек высунули головы в взгляде. Если у кого-то есть предложение о том, как я мог бы улучшить сам вопрос, я буду рад обратной связи. Из моей нехватки репутации вы можете предположить, что я новичок в этом.

1 ответ

Кнопка повтора должна делать то, что вы ищете

Интервал -> количество времени в миллисекундах между повторами после начала повтора. Значение должно быть неотрицательным.

Задержка -> количество времени, в миллисекундах, когда кнопка Repeat Button ожидает нажатия, прежде чем начнет повторяться.

<RepeatButton  FontFamily="Marlett" 
        Delay="500" 
        Interval="100" 
        FontSize="40" 
        Content="5" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Top" 
        Margin="100" 
        Width="100" 
        Height="50"        
        Command="{Binding IncrBAnglePos}" 
        CommandParameter="{Binding ElementName=slider, Path=Value}">
</RepeatButton>
Другие вопросы по тегам