Удерживайте кнопку, чтобы повторить команды
У меня есть кнопка в моем проекте 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>