Caliburn Micro Capture鼠标位置

时间:2012-10-18 09:41:20

标签: .net wpf user-interface mvvm caliburn.micro

我是Caliburn Micro的新手,并且只要在Viewport3D控件上的左按钮启动时尝试捕获鼠标位置。

在XAML中使用它;

cal:Message.Attach="[Event MouseLeftButtonUp] = [Action MouseUp($eventArgs, $source)]

以及ViewModel中的内容:

public void MouseUp(MouseEventArgs args, IInputElement elem)
{
    Point pt = args.GetPosition(elem);
    //do something with pt
}

我可以获得鼠标命中位置。但是,我想在ViewModel中使用的是:

public void MouseUp(Point pt)
{
    // do something with pt
}

我不想在我的ViewModel中使用IInputElement参数等 - 该事件由Viewport引发,因此它应被视为IInputElement。

我能实现吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

是的,你可以这样做。你想要做的是使用MessageBinder.SpecialValues来创建你自己的特殊值,它将解析点并返回它。

因此,在设置Caliburn.Micro的地方,添加以下代码:

        MessageBinder.SpecialValues.Add("$mousepoint", ctx =>
        {
            var e = ctx.EventArgs as MouseEventArgs;
            if (e == null)
                return null;

            return e.GetPosition(ctx.Source);
        });

然后你可以在Message.Attach中使用它:

cal:Message.Attach="[Event MouseLeftButtonUp] = [Action MouseUp($mousepoint)]

你去,清洁ViewModel :)。