Только сегодня я сделал то же самое в своем проекте. Я расскажу вам основную логику того, что я реализовал ( при условии, что это нужно сделать с помощью кнопки ).
Шаг 1:
На кнопке _ ManipulationStarted _ событие запускает таймер с интервалом , после которого выхотите запустить повторное действие.
Шаг 2:
На кнопке _ ManipulationCompleted _ событиеостановите таймер.
Шаг 3:
Если таймер срабатывает , остановите таймер и запустите другой таймер с интервалом = интервал повторения для вашего действия . И внутри второго таймера обработчик fire выполняет вашу операцию, только если control имеет focus .В этом случае, когда элементом управления является кнопка , вы можете проверить, является ли кнопка . Если значение равно true, выполнить действие.
Код будет выглядеть примерно так:
Button forward=new Button();
DispatcherTimer forwardHoldTimer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(2) };
forward.ManipulationStarted += (a, b) => { forwardHoldTimer.Start(); };
forward.ManipulationCompleted += (c, d) => { forwardHoldTimer.Stop(); };
forwardHoldTimer.Tick+=(s1,e1)=>
{
forwardHoldTimer.Stop();
DispatcherTimer t = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(100) };
t.Tick += (x, y) =>
{
if (forward.IsPressed)
{
//Your action logic will go here
}
else
t.Stop();
};
t.Start();
};
Надеюсь, это поможет.