【问题标题】:MouseBinding Command is not fired未触发 MouseBinding 命令
【发布时间】:2016-03-09 11:06:05
【问题描述】:

这是我的 XAML 代码:

<Grid>
    <Grid.InputBindings>
        <MouseBinding Gesture="LeftDoubleClick" Command="{Binding MouseDblClick}" />
    </Grid.InputBindings>
</Grid>

和我的代码隐藏:

private RelayCommand _MouseDoubleClick;

public ICommand MouseDblClick
{
    get
    {
        if (_MouseDoubleClick == null)
        {
            _MouseDoubleClick = new RelayCommand(param => Clicked());
        }

        return _MouseDoubleClick;
    }
}

private void Clicked()
{
    MessageBox.Show("Works");
}

我希望在双击网格后显示消息框。但什么也没有发生。哪里错了?

【问题讨论】:

  • 您的代码在您单击网格本身(空白区域)时有效。但是其他控件自己处理鼠标事件,所以我想这就是你的问题的原因。
  • 不,网格是唯一的控件。所以只有“空白区域”。
  • 然后检查网格的实际大小,可能它比你想象的要小,你并没有真正点击它。我复制了你的代码,它对我有用。
  • 为它设置一些背景(至少是透明的),然后它应该开始捕捉鼠标事件。
  • 你有没有为Window设置DataContext

标签: c# wpf xaml binding command


【解决方案1】:

正如icebat 在他的 cmets 中提到的那样。尝试设置Grid的BG和一些Brush

<Grid Background="Green">
    <Grid.InputBindings>
        <MouseBinding Gesture="LeftDoubleClick" Command="{Binding MouseDblClick}" />            
    </Grid.InputBindings>
</Grid>

默认情况下,Grid 将具有 Background="{x:Null}",如 here 所述,不可点击

另外,请确保您已将 VM 对象传递给 DataContextView

类似this.DataContext = new ViewModel();

【讨论】:

    【解决方案2】:

    另一种解决方案的建议:

    我不是命令的粉丝,如果可以帮助您,我还有另一个基于触发事件的解决方案:

    1) 添加对 System.Windows.Interactivity 和 Microsoft.Expression.Interactions DLL 的引用(在 C:\Program Files (x86)\Microsoft SDKs\Expression\Blend.NETFramework\v4.0\Libraries 中找到)

    2) 将此添加到您的 XAML 文件中:

     xmlns:l="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
     xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
    

    3) 在你的网格中添加这个:

    <Grid...>
         <l:Interaction.Triggers>
              <l:EventTrigger EventName="DoubleClick">
                     <ei:CallMethodAction TargetObject="{Binding}"
                              MethodName="Clicked" />
              </l:EventTrigger>
         </l:Interaction.Triggers>
    ...
    </Grid>
    

    4) 将您的方法“Clicked()”公开

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多