Caliburn.Micro Action不起作用

时间:2012-09-07 20:13:13

标签: 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" 
        Maximum="{Binding Player.NaturalDuration.TimeSpan.TotalMilliseconds}"/>

在ViewModel中:

public void OnSliderMouseUp(Slider slider)
{
    int blah = 9;
}
永远不会调用

OnSliderMouseUp()。你能告诉我我错过了什么吗?

1 个答案:

答案 0 :(得分:9)

实际上你有两个问题:

  1. Slider控件不会触发MouseUp事件。如果您对用户停止拖动滑块时触发的事件感兴趣,那么您正在寻找Thumb.DragCompleted。 您可以在此处找到更多信息:WPF: Slider with an event that triggers after a user drags

  2. 但如果你要写

    <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

  3. 这是一个有效的灵魂(使用上述问题的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