加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 按住按钮重复命令

发布时间:2020-12-15 22:49:14 所属栏目:百科 来源:网络整理
导读:我的 WPF项目中有一个按钮,我希望它在按住按钮时反复执行相同的命令.我可以使用RepeatButton,但我的偏好是命令在它完成运行后(在它自己的Task中)再次执行,而不是依赖于RepeatButton控件的延迟和间隔属性. 我不介意制作按钮单击方法,但命令操作长时间运行,执
我的 WPF项目中有一个按钮,我希望它在按住按钮时反复执行相同的命令.我可以使用RepeatButton,但我的偏好是命令在它完成运行后(在它自己的Task中)再次执行,而不是依赖于RepeatButton控件的延迟和间隔属性.

我不介意制作按钮单击方法,但命令操作长时间运行,执行时间将取决于ExecuteParameter的值(在这种情况下是表示机器物理位置的双元组).

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;
}

更新:我可以看到一些人在看了一眼就戳了戳头.如果有人对我如何改进问题提出建议,我会欢迎反馈意见.由于我缺乏声誉,你可能会猜测我是新手.

解决方法

Repeat Button应该做你想要的

Interval – >重复开始后重复之间的时间量(以毫秒为单位).该值必须是非负的.

Delay – >在重复开始重复之前,RepeatButton在按下时等待的时间量(以毫秒为单位).

<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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读