我有网格控件,我需要传递MouseWheel事件来查看模型。
现在我正在这样做
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseWheel">
<i:InvokeCommandAction Command="{Binding MouseWheelCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
但我需要在鼠标向上滚动和鼠标向下滚动时执行不同的操作。 怎么做?
我可以在没有代码的情况下执行此操作并且没有外部库吗?我正在使用c#,wpf,visual studio 2010 express。
答案 0 :(得分:0)
为此,您需要MVVM中的MouseWheelEventArgs。所以将此EventArgs传递给commandParamter。 你可以参考这个链接--- Passing EventArgs as CommandParameter
然后在你的View-Model Class中你可以使用这个事件args如下
void Scroll_MouseWheel(MouseWheelEventArgs e)
{
if (e.Delta > 0)
{
// Mouse Wheel Up Action
}
else
{
// Mouse Wheel Down Action
}
e.Handled = true;
}
答案 1 :(得分: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>