Wpf Caliburn.Micro Action不';行不通
我有一个带有Caliburn.Micro的WPF应用程序 我想处理滑块的移动,即MouseUp事件Wpf Caliburn.Micro Action不';行不通,wpf,slider,caliburn.micro,Wpf,Slider,Caliburn.micro,我有一个带有Caliburn.Micro的WPF应用程序 我想处理滑块的移动,即MouseUp事件 <Slider cal:Message.Attach="[Event MouseUp] = [Action OnSliderMouseUp($this)]" Value="{Binding PlayerPosition, Mode=OneWay}" MinWidth="200" VerticalAlignment="Center" Minimum="0
<Slider cal:Message.Attach="[Event MouseUp] = [Action OnSliderMouseUp($this)]"
Value="{Binding PlayerPosition, Mode=OneWay}" MinWidth="200"
VerticalAlignment="Center" Minimum="0"
Maximum="{Binding Player.NaturalDuration.TimeSpan.TotalMilliseconds}"/>
从不调用OnSliderMouseUp()。你能告诉我我错过了什么吗 实际上你有两个问题:
滑块
控件不会触发MouseUp
事件。如果您对当用户停止拖动滑块时触发的事件感兴趣,则您正在查找该事件。
您可以在此处找到更多信息:<Slider cal:Message.Attach="[Event Thumb.DragCompleted] = [Action OnSliderMouseUp($this)]" />
请注意,由于
Thumb.dragcomplete
附加的事件$this
不起作用,您需要使用$source。是否已将视图和viewmodel连接到Caliburn?如何将DataContext设置为viewmodel?尝试将cal:Action.TargetWithoutContext=“{Binding}”
添加到您的滑块
如果它解决了您的问题,则意味着您的DataContext未正确连接到CaliburnI。我遵循命名约定,因此我假设DataContext是ViewModel。我添加了您建议的代码,但仍然不起作用。非常感谢您的回答。现在执行到处理程序,但参数为null。你能告诉我为什么会这样吗?谢谢。我也意识到了这一点,并更新了我的答案。见最后的注释。您需要使用$source
而不是$this
(或者$eventArgs并从DragComplatedEventArgs
的source
属性中获取滑块)奇怪的是,它对我来说适用$source
。请使用$eventArgs
进行尝试,但在这种情况下,您的方法应该如下所示:OnSliderMouseUp(DragCompletedEventArgs args)
然后args.Source
应该包含您的滑块。如果没有,请发布args.Source
和args.OriginalSource
什么是i:
命名空间和local:
namespace?@M.kazemAkhgary i isxmlns:i=“clr namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity”
local是您自己的名称空间,在这里您可以使用RoutedEventTrigger
实现
<Slider cal:Message.Attach="[Event Thumb.DragCompleted] = [Action OnSliderMouseUp($this)]" />
<Slider Value="{Binding PlayerPosition, Mode=OneWay}" MinWidth="200" ...>
<i:Interaction.Triggers>
<local:RoutedEventTrigger RoutedEvent="Thumb.DragCompleted">
<cal:ActionMessage MethodName="OnSliderMouseUp">
<cal:Parameter Value="$source" />
</cal:ActionMessage>
</local:RoutedEventTrigger>
</i:Interaction.Triggers>
</Slider>