在执行按钮的自定义命令时如何查找按钮是单击还是双击

西瓦苏拉曼尼亚人

我的要求:我想为WPF按钮设置自定义命令,在自定义命令执行过程中,我想知道该命令是通过鼠标单击还是双击执行。另外,当customCommand的CanExecute返回false时,我希望按钮进入禁用状态。请参阅下面的详细信息。

说明:嗨,在WPF中,我为按钮设置了自定义命令。当我单击按钮时(对于单击和双击),命令都将执行。在自定义命令中,我要为单击和双击处理单独的操作。是否有可能单击鼠标中的whetehr按钮或在此内部命令中双击它?我使用.Net 4.0,C#4.0

注意:我提到了如何将WPF中的命令绑定到控件的双击事件处理程序?但是我在这里遇到了限制。
限制:当我为按钮设置自定义命令时,然后在CustomCommand CanExcute上返回false时按钮将进入禁用状态。但是根据上述建议,通过将命令设置为鼠标绑定并将鼠标绑定设置为按钮可以使用,但是当CanExecute返回false时,按钮不会变为禁用状态。如何克服这个

public CustomCommand:ICommandd {public bool CanExecute(object parameter){//任意逻辑}

public void Execute(object parameter)
{
    if(MouseSingleClick)
    {
        perform ActionA;
    }
    if(MouseDoubleClick)
    {
        PerformActionB;
    }
}

}

提前致谢。

桑德什

我可以使用它,并对其进行调整以以MVVM友好的方式使用它。

我正在使用Cinch框架给出一个工作示例

我希望这可以帮助您提出想法。

MyViewModel

public class MyViewModel : INotifyPropertyChanged
{

    private static DispatcherTimer myClickWaitTimer =
            new DispatcherTimer (
                    new TimeSpan (0, 0, 0, 0, 150),
                    DispatcherPriority.Background,
                    mouseWaitTimer_Tick,
                    Dispatcher.CurrentDispatcher);

    private static void mouseWaitTimer_Tick (object sender, EventArgs e)
    {
        myClickWaitTimer.Stop ();

        Debug.WriteLine ("Single Click Executed");//PerformActionA
    }

    public ICommand CinchSingleClickCommand { get; private set; }
    public ICommand CinchDoubleClickCommand { get; private set; }


    public MyViewModel ()
    {
        CinchSingleClickCommand = new SimpleCommand<object, EventToCommandArgs> (CanExecuteSingleCinch, ExecuteSingleCinch);
        CinchDoubleClickCommand = new SimpleCommand<object, EventToCommandArgs> (CanExecuteDoubleCinch, ExecuteDoubleCinch);
        myClickWaitTimer.Stop ();
    }

    private void ExecuteDoubleCinch (EventToCommandArgs obj)
    {
        if (obj.EventArgs is MouseEventArgs)
        {
            myClickWaitTimer.Stop ();
            Debug.WriteLine ("Double Click Executed");//PerformActionB
            var mouseEvent = obj.EventArgs as MouseEventArgs;
            mouseEvent.Handled = true;
        }
    }

    private bool CanExecuteDoubleCinch (object arg)
    {
        return true;
    }

    private void ExecuteSingleCinch (EventToCommandArgs obj)
    {
        if (!(obj.EventArgs is MouseEventArgs))
        {
            myClickWaitTimer.Start ();
            var mouseEvent = obj.EventArgs as RoutedEventArgs;
            mouseEvent.Handled = true;
        }
    }

    private bool CanExecuteSingleCinch (object arg)
    {
        return true;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged (string propertyName)
    {
        var pc = PropertyChanged;
        if (pc != null)
            pc (this, new PropertyChangedEventArgs (propertyName));
    }
}

您可以使用TimeSpan构造函数来设置您希望在单击和双击之间保持多少延迟。

风景

<Window x:Class="DataGridTesting.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            xmlns:cinch="clr-namespace:Cinch;assembly=Cinch.WPF"
            Title="MainWindow"
            Height="350"
            Width="525">
<DockPanel>
    <Button x:Name="button"
                    Content="Test">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <cinch:EventToCommandTrigger Command="{Binding CinchDoubleClickCommand}" />
            </i:EventTrigger>
            <i:EventTrigger EventName="Click">
                <cinch:EventToCommandTrigger Command="{Binding CinchSingleClickCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>
</DockPanel>
</Window>

视图后面的代码

public partial class MainWindow : Window
{
    public MainWindow ()
    {
        InitializeComponent ();
        this.DataContext = new MyViewModel ();
    }
}

我使用Nuget软件包管理器为提取所需的dll CinchSystem.Windows.Interactivity并且Microsoft.Expression.Interactions

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击按钮Xamarin时如何添加自定义视图

来自分类Dev

如何在自定义适配器中更改按钮单击时的按钮文本

来自分类Dev

单击按钮时从“自定义EditText”字段获取数据

来自分类Dev

单击具有自定义主题的按钮时崩溃

来自分类Dev

单击重置按钮时,重置自定义角度滤镜

来自分类Dev

单击 r 中的操作按钮时的自定义消息

来自分类Dev

jqGrid 在自定义按钮单击时获取行数据

来自分类Dev

仅当我单击“编辑”按钮时,如何使自定义窗口小部件可编辑?

来自分类Dev

如何更改按钮单击时自定义单元格的高度?

来自分类Dev

如何在单击按钮时显示自定义PDF模板

来自分类Dev

如何在单击按钮时显示自定义PDF模板

来自分类Dev

如何在按钮单击时在自定义视图中绘制圆圈

来自分类Dev

当单击其中的按钮时,如何不关闭 xtk:SplitButton 的自定义弹出窗口?

来自分类Dev

如何使用按钮公式执行自定义搜索

来自分类Dev

单击事件到自定义按钮

来自分类Dev

仅自定义单击的按钮

来自分类Dev

自定义按钮上的“单击”效果

来自分类Dev

扩展searchView时如何自定义“向上”按钮?

来自分类Dev

UITableViewCellEditingStyleDelete时如何自定义删除按钮?

来自分类Dev

UITableViewCellEditingStyleDelete时如何自定义删除按钮?

来自分类Dev

如何自定义单击为双击?js

来自分类Dev

无法执行按钮操作/单击自定义MKannotation标注视图

来自分类Dev

在Kendo上传控件的刷新按钮单击上执行自定义javascript功能

来自分类Dev

AngularJS中的Jasmine自定义启动-单击按钮执行测试

来自分类Dev

在Kendo上传控件的刷新按钮单击上执行自定义javascript功能

来自分类Dev

单击自定义按钮将被执行3-4次

来自分类Dev

如何在按钮上添加自定义属性并在android中单击时检索它?

来自分类Dev

Swift-如何在单击按钮时在自定义表格视图单元格中获取标签值

来自分类Dev

在SwiftUI聊天应用中单击发送按钮时,如何清除自定义UITextView中的文本?

Related 相关文章

  1. 1

    单击按钮Xamarin时如何添加自定义视图

  2. 2

    如何在自定义适配器中更改按钮单击时的按钮文本

  3. 3

    单击按钮时从“自定义EditText”字段获取数据

  4. 4

    单击具有自定义主题的按钮时崩溃

  5. 5

    单击重置按钮时,重置自定义角度滤镜

  6. 6

    单击 r 中的操作按钮时的自定义消息

  7. 7

    jqGrid 在自定义按钮单击时获取行数据

  8. 8

    仅当我单击“编辑”按钮时,如何使自定义窗口小部件可编辑?

  9. 9

    如何更改按钮单击时自定义单元格的高度?

  10. 10

    如何在单击按钮时显示自定义PDF模板

  11. 11

    如何在单击按钮时显示自定义PDF模板

  12. 12

    如何在按钮单击时在自定义视图中绘制圆圈

  13. 13

    当单击其中的按钮时,如何不关闭 xtk:SplitButton 的自定义弹出窗口?

  14. 14

    如何使用按钮公式执行自定义搜索

  15. 15

    单击事件到自定义按钮

  16. 16

    仅自定义单击的按钮

  17. 17

    自定义按钮上的“单击”效果

  18. 18

    扩展searchView时如何自定义“向上”按钮?

  19. 19

    UITableViewCellEditingStyleDelete时如何自定义删除按钮?

  20. 20

    UITableViewCellEditingStyleDelete时如何自定义删除按钮?

  21. 21

    如何自定义单击为双击?js

  22. 22

    无法执行按钮操作/单击自定义MKannotation标注视图

  23. 23

    在Kendo上传控件的刷新按钮单击上执行自定义javascript功能

  24. 24

    AngularJS中的Jasmine自定义启动-单击按钮执行测试

  25. 25

    在Kendo上传控件的刷新按钮单击上执行自定义javascript功能

  26. 26

    单击自定义按钮将被执行3-4次

  27. 27

    如何在按钮上添加自定义属性并在android中单击时检索它?

  28. 28

    Swift-如何在单击按钮时在自定义表格视图单元格中获取标签值

  29. 29

    在SwiftUI聊天应用中单击发送按钮时,如何清除自定义UITextView中的文本?

热门标签

归档