我有一个带Caliburn.Micro的WPF应用程序。
我想处理滑块的移动,即MouseUp事件。
<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}"/>
在ViewModel中:
public void OnSliderMouseUp(Slider slider)
{
int blah = 9;
}
永远不会调用 OnSliderMouseUp()
。你能告诉我我错过了什么吗?
答案 0 :(得分:9)
实际上你有两个问题:
Slider
控件不会触发MouseUp
事件。如果您对用户停止拖动滑块时触发的事件感兴趣,那么您正在寻找Thumb.DragCompleted。
您可以在此处找到更多信息:WPF: Slider with an event that triggers after a user drags
但如果你要写
<Slider cal:Message.Attach="[Event Thumb.DragCompleted] = [Action OnSliderMouseUp($this)]" />
它仍然无法正常工作。因为Caliburn.Micro(由Calibrun.Micro使用的preiese System.Windows.Interactiviy.EventTrigger
)不支持附加事件。有关详情和解决方法,请参阅:using attached events with caliburn micro Message.Attach
这是一个有效的灵魂(使用上述问题的RoutedEventTrigger
实现):
<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>
请注意,由于Thumb.DragCompleted
附加事件$this
无效,您需要使用 $ source 。