我怎样才能更好地控制 Caliburn Micro 的动作冒泡?
How can I better control action bubbling with caliburn micro?
我有一个 Thumb 控件,用户应该可以在 UI 周围拖动它。当我尝试拖动控件时出现异常 "No target found for method Thumb_DragDelta"。我认为问题可能在于我在视图模型中编写方法的方式,但我不确定。此外,该方法不是很好的 MVVM,因为它直接引用视图,但同样,不确定如何让它变得更好。我对 Caliburn Micro 和一般编程还很陌生。感谢您的帮助!
视图中的拇指控件:
<Thumb cal:Message.Attach="[Event DragDelta] = [Action Thumb_DragDelta($view)]"
Background="blue"
HorizontalAlignment="Left"
Width="20"/>
以及viewmodel中对应的方法:
private Thumb _thumb;
public Thumb MyThumb
{
get
{
return _thumb;
}
set {
_thumb = value;
NotifyOfPropertyChange(() => MyThumb);
}
}
public void Thumb_DragDelta(Views.NaturalDisasterView view, DragDeltaEventArgs e)
{
try
{
var transform = (TranslateTransform)MyThumb.RenderTransform;
transform.X = Math.Max(0, Math.Min(transform.X + e.HorizontalChange, view.ActualWidth - MyThumb.ActualWidth));
view.AfterScene.Clip = new RectangleGeometry() { Rect = new Rect(0, 0, transform.X, view.ActualHeight) };
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
鉴于您当前的 XAML,视图模型中 Thumb_DragDelta
方法的有效签名如下,即它只接受一个参数,该参数是对视图的引用绑定到视图模型:
public void Thumb_DragDelta(FrameworkElement view)
{
//...
}
如果你也想要 EventArgs
,你也应该传递 $eventArgs
:
<Thumb cal:Message.Attach="[Event DragDelta] = [Action Thumb_DragDelta($view, $eventArgs)]"
Background="blue"
HorizontalAlignment="Left"
Width="20"/>
我有一个 Thumb 控件,用户应该可以在 UI 周围拖动它。当我尝试拖动控件时出现异常 "No target found for method Thumb_DragDelta"。我认为问题可能在于我在视图模型中编写方法的方式,但我不确定。此外,该方法不是很好的 MVVM,因为它直接引用视图,但同样,不确定如何让它变得更好。我对 Caliburn Micro 和一般编程还很陌生。感谢您的帮助!
视图中的拇指控件:
<Thumb cal:Message.Attach="[Event DragDelta] = [Action Thumb_DragDelta($view)]"
Background="blue"
HorizontalAlignment="Left"
Width="20"/>
以及viewmodel中对应的方法:
private Thumb _thumb;
public Thumb MyThumb
{
get
{
return _thumb;
}
set {
_thumb = value;
NotifyOfPropertyChange(() => MyThumb);
}
}
public void Thumb_DragDelta(Views.NaturalDisasterView view, DragDeltaEventArgs e)
{
try
{
var transform = (TranslateTransform)MyThumb.RenderTransform;
transform.X = Math.Max(0, Math.Min(transform.X + e.HorizontalChange, view.ActualWidth - MyThumb.ActualWidth));
view.AfterScene.Clip = new RectangleGeometry() { Rect = new Rect(0, 0, transform.X, view.ActualHeight) };
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
鉴于您当前的 XAML,视图模型中 Thumb_DragDelta
方法的有效签名如下,即它只接受一个参数,该参数是对视图的引用绑定到视图模型:
public void Thumb_DragDelta(FrameworkElement view)
{
//...
}
如果你也想要 EventArgs
,你也应该传递 $eventArgs
:
<Thumb cal:Message.Attach="[Event DragDelta] = [Action Thumb_DragDelta($view, $eventArgs)]"
Background="blue"
HorizontalAlignment="Left"
Width="20"/>