4

スライダーの最大値をメディア要素の期間にバインドし、スライダーの現在の値をメディア要素の位置にバインドしようとしましたが、何らかの理由でそうではありません。

ビデオの再生中にスライダーを親指で動かしたい。

<Slider x:Name="videoSlider" Value="{Binding ElementName=mp3MediaElement, Path=Position}" 
ValueChanged="videoSlider_ValueChanged" IsMoveToPointEnabled="True" 
Maximum="{Binding ElementName=mp3MediaElement, Path=NaturalDuration}" 
AllowDrop="True" DataContext="{Binding ElementName=mp3MediaElement}" />
4

4 に答える 4

10

私はバインディングを使用しませんでした..同様の問題があり、これにタイマーを使用しました(私のコードはSilverlightにあり、WPFでも同じであると想定されています):

最初の方向 (ムービーはスライダーを更新します)

private TimeSpan TotalTime;

private void MyMediaElement_MediaOpened(object sender, RoutedEventArgs e)
        {
            TotalTime = MyMediaElement.NaturalDuration.TimeSpan;

            // Create a timer that will update the counters and the time slider
            timerVideoTime = new DispatcherTimer();
            timerVideoTime.Interval = TimeSpan.FromSeconds(1);
            timerVideoTime.Tick += new EventHandler(timer_Tick);
            timerVideoTime.Start();
        }

void timer_Tick(object sender, EventArgs e)
        {
            // Check if the movie finished calculate it's total time
            if (MyMediaElement.NaturalDuration.TimeSpan.TotalSeconds > 0)
            {
                if (TotalTime.TotalSeconds > 0)
                {
                    // Updating time slider
                    timeSlider.Value = MyMediaElement.Position.TotalSeconds /
                                       TotalTime.TotalSeconds;
                }
            }
        }


フォーム ctorの 2 番目の方向 (ユーザーがスライダーを更新する)またはこのようなもので、次の行を書き込みます。

timeSlider.AddHandler(MouseLeftButtonUpEvent, 
                      new MouseButtonEventHandler(timeSlider_MouseLeftButtonUp), 
                      true);

イベントハンドラは次のとおりです。

private void timeSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (TotalTime.TotalSeconds > 0)
            {
                MyMediaElement.Position = TimeSpan.FromSeconds(timeSlider.Value * TotalTime.TotalSeconds);
            }
        }
于 2012-04-18T12:12:11.737 に答える
3

Slider プロパティの Value と Maximum はどちらも Double 型です。タイプの値にバインドしようとしているTimeSpanためDuration、バインディングシステムが機能しません。

コンバーターを作成したり、プロパティにバインドしたりすることができNaturalDuration.TimeSpan.TotalSecondsます。

お役に立てれば。

ところで、バインドの一部が機能しない場合は、Visual Studio の [出力] ウィンドウでバインド エラーを確認できます。

于 2012-04-18T12:21:26.397 に答える
0

私は同じ問題を抱えていました.スライダーはMediaElementのUIを更新していませんでした..
私はそれを修正するのにかなりの時間を費やしましたが、それが他の人に役立つかどうかはわかりません.
ただし、他の誰かがその問題に遭遇した場合に備えて、MediaElement の UI が位置に応じて正しい画像を自動的に検索できるようにする ScrubbingEnabled プロパティがメディア要素にあることに注意してください。
一時停止モードでスライダーをドラッグしようとしているときに非常に便利です。MediaElement の XAML に
次を追加するだけです。ScrubbingEnabled="True"

于 2016-12-20T06:17:20.073 に答える