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}"/>

ViewModel で:

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

OnSliderMouseUp()呼び出されることはありません。私が欠けているものを教えてください。

4

1 に答える 1

9

実際には、次の 2 つの問題があります。

  1. Sliderコントロールはイベントを発生させませんMouseUp。ユーザーがスライダーのドラッグを停止したときに発生するイベントに関心がある場合は、Thumb.DragCompletedを探しています。ここで詳細情報を見つけることができます: WPF: ユーザーがドラッグした後にトリガーされるイベントを持つスライダー

  2. しかし、あなたが書くなら

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

    それでもうまくいきません。Caliburn.Micro (正確には Calibrun.MicroSystem.Windows.Interactiviy.EventTriggerで使用される) は添付イベントをサポートしていないためです。詳細と回避策については、次を参照してください: 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添付されたイベントは機能しないため、代わりに$source$thisを使用する必要があることに注意してください。

于 2012-09-10T13:05:15.450 に答える