2012-10-18 88 views
0

我是Caliburn Micro的新手,嘗試捕獲鼠標位置,只要左側按鈕在Viewport3D控件上。Caliburn Micro捕獲鼠標位置

在XAML中使用它;

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

,並在視圖模型:

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

我可以得到鼠標擊中的位置。不過,我想在視圖模型是一樣的東西:

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

我不想在我的視圖模型參數IInputElement等 - 而該事件由視口升起,所以應該被視爲IInputElement 。

我可以做到這一點嗎?

在此先感謝。

回答

3

是的,你可以做到這一點。你想要做的是使用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 :)。

+0

只要記住要確保您的特殊值參數名稱是小寫,或者您可能會遇到參數傳遞問題! – Charleh