3

我有一个带有 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}"/>

在视图模型中:

public void OnSliderMouseUp(Slider slider)
{
    int blah = 9;
}

OnSliderMouseUp()永远不会被调用。你能告诉我我错过了什么吗?

4

1 回答 1

9

其实你有两个问题:

  1. Slider控件不会触发事件MouseUp。如果您对用户停止拖动滑块时触发的事件感兴趣,您正在寻找Thumb.DragCompleted。您可以在此处找到更多信息:WPF:带有在用户拖动后触发的事件的滑块

  2. 但是如果你写

    <Slider cal:Message.Attach="[Event Thumb.DragCompleted] = [Action OnSliderMouseUp($this)]"  />
    

    它仍然无法正常工作。因为 Caliburn.Micro(准确地说System.Windows.Interactiviy.EventTrigger是 Calibrun.Micro 使用的)不支持附加事件。有关更多信息和解决方法,请参阅:使用带有 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

于 2012-09-10T13:05:15.450 回答