Wpf Caliburn.Micro Action不';行不通

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

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

从不调用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 is
    xmlns: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>