【问题标题】:Caliburn Micro Capture Mouse PositionCaliburn Micro Capture 鼠标位置
【发布时间】:2012-10-08 17:36:53
【问题描述】:

我是 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。

我能做到这一点吗?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    是的,您可以这样做。您要做的是使用 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 :)。

    【讨论】:

    • 请记住确保您的特殊值参数名称是小写的,否则您可能会遇到参数传递问题!
    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 2013-12-21
    • 2012-01-29
    • 2012-10-24
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多