3

我有网格控件,我需要将 MouseWheel 事件传递给查看模型。

现在我正在这样做

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseWheel">
            <i:InvokeCommandAction Command="{Binding MouseWheelCommand}"  />
        </i:EventTrigger>

    </i:Interaction.Triggers>

但我需要对鼠标向上滚动和鼠标向下滚动执行不同的操作。怎么做?

我可以在没有代码和外部库的情况下做到这一点吗?我使用 c#、wpf、visual studio 2010 express。

4

2 回答 2

0

为此,您需要 MVVM 中的 MouseWheelEventArgs。所以将此 EventArgs 作为 commandParamter 传递。您可以参考此链接 --- Passing EventArgs as CommandParameter

然后在您的视图模型类中,您可以使用此事件参数,如下所示

 void Scroll_MouseWheel(MouseWheelEventArgs e)
    {
        if (e.Delta > 0)
        {
           // Mouse Wheel Up Action
        }
        else
        {
           // Mouse Wheel Down Action
        }

        e.Handled = true;
    }
于 2013-08-07T09:21:06.777 回答
0

您可以使用带有自定义鼠标手势的输入绑定,这很容易实现:

public class MouseWheelUp : MouseGesture
{
    public MouseWheelUp(): base(MouseAction.WheelClick)
    {
    }

    public MouseWheelUp(ModifierKeys modifiers) : base(MouseAction.WheelClick, modifiers)
    {
    }    

    public override bool Matches(object targetElement, InputEventArgs inputEventArgs)
    {
      if (!base.Matches(targetElement, inputEventArgs)) return false;
      if (!(inputEventArgs is MouseWheelEventArgs)) return false;
      var args = (MouseWheelEventArgs)inputEventArgs;
      return args.Delta > 0;       
    }
}

然后像这样使用它:

<TextBlock>
        <TextBlock.InputBindings>

            <MouseBinding Command="{Binding Command}">
                <MouseBinding.Gesture>
                    <me:MouseWheelUp />
                </MouseBinding.Gesture>
            </MouseBinding>

        </TextBlock.InputBindings>
        ABCEFG
 </TextBlock>
于 2013-08-07T09:30:13.570 回答