【问题标题】:What event(s) trigger a command in a button?什么事件触发按钮中的命令?
【发布时间】:2017-03-23 08:34:03
【问题描述】:

所以我有一个关于我正在从事的项目的问题:

什么事件用于触发按钮控件中的命令?只是点击事件吗?

因为当我单击按钮时,我的命令将在释放鼠标按钮后执行?所以这就是我想知道的原因。

<Button x:Name="ClickButton" Content="Click here" HorizontalAlignment="Left" Margin="325,123,0,0" VerticalAlignment="Top" Width="75" Command="{Binding ClickHereCommand}"/>

ViewModel 中的代码

  public ICommand ClickHereCommand => (new CommandHandler(() => IsGoingUp(), _canExecute));

    public void IsGoingUp()
    {
      Console.WriteLine("Moving up...");
    }

【问题讨论】:

  • 当您实际点击时,点击甚至会被触发。你在找什么?
  • @Anand,后面添加了代码,当我点击按钮并按住它时,释放鼠标按钮后控制台写入行将被执行
  • Wpf - 阅读routed events,tbh 我不知道确切的顺序,但可以肯定的是鼠标按下+鼠标向上事件,检查坐标保持不变,也许(我不知道)时间检查。这将防止大多数错误场景检测到点击:例如释放鼠标左键外按下的按钮。

标签: c# wpf button command


【解决方案1】:

默认情况下,Command 属性确实绑定到 Click 事件。您可以将您的 Command 属性绑定到其他事件,如下所示:https://stackoverflow.com/a/20356042/1166719

如果您只想将 Command 绑定到另一个鼠标事件,那么 ClickMode 属性就是您要寻找的:https://msdn.microsoft.com/en-US/library/system.windows.controls.primitives.buttonbase.clickmode(v=vs.110).aspx

【讨论】:

  • 感谢您的回答,所以 Click 事件是唯一绑定到命令属性的事件?
  • 我刚刚使用 ClickMode 属性编辑了我的答案。但是,是的,Command 属性绑定到三个 ClickMode 成员(Hover、Press 或 Release)中的任何一个。
  • 嗯,默认情况下我假设它是 Release?
  • 确实(它写在 ClickMode MSDN 文章中;))。
  • 谢谢你的解释,我去看看!:)
【解决方案2】:

事件与控件状态相关。也就是说,当一个按钮被点击,或者当鼠标移到它上面时等等。

如果您想要可用事件的列表,请在设计器中选择按钮,然后调出属性 (F4)。然后单击属性窗口中的闪电按钮。这将列出所选控件的所有事件。您还可以从这里创建处理这些事件的方法。

这里是按钮控件的事件列表

https://msdn.microsoft.com/en-us/library/system.windows.controls.button_events(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2014-09-01
    相关资源
    最近更新 更多