Caliburn.Micro Action不起作用

Dav*_*het 3 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}"/>
Run Code Online (Sandbox Code Playgroud)

在ViewModel中:

public void OnSliderMouseUp(Slider slider)
{
    int blah = 9;
}
Run Code Online (Sandbox Code Playgroud)

OnSliderMouseUp()永远不会被称为.你能告诉我我错过了什么吗?

nem*_*esv 9

实际上你有两个问题:

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

  2. 但如果你写的话

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

    它仍然无法运作.因为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>
Run Code Online (Sandbox Code Playgroud)

请注意,因为Thumb.DragCompleted附加事件$this不起作用,您需要使用$ source.