MediaElement を持っていますが、MediaElement のプロパティ「位置」が変更されたときに関数を呼び出すにはどうすればよいですか?
位置は DependencyProperty ではありません。
MediaElement を持っていますが、MediaElement のプロパティ「位置」が変更されたときに関数を呼び出すにはどうすればよいですか?
位置は DependencyProperty ではありません。
DispatchTimer を使用できます。この記事では、これを機能させる方法についての良い洞察を提供します。WPF を使用した MediaElement など。
これは、私が取り組んでいるプロジェクトから取ったサンプルコードです。スライダー コントロールを使用してビデオの位置を表示し、ユーザーが位置を変更できるようにします。
私も少し初心者なので、一部が間違っている可能性があります(コメントセクションで問題についてコメントしてください:)。
private DispatcherTimer mTimer;
private bool mIsDragging = false;
private bool mTick = false;
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
medPlayer.Play();
medPlayer.Stop();
mTimer = new DispatcherTimer();
mTimer.Interval = TimeSpan.FromMilliseconds(100);
mTimer.Tick += new EventHandler(mTimer_Tick);
mTimer.Start();
}
void mTimer_Tick(object sender, EventArgs e)
{
if (!mIsDragging)
{
try
{
mTick = true;
sldPosition.Value = medPlayer.Position.TotalMilliseconds;
}
finally
{
mTick = false;
}
}
}
private void sldPosition_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
{
mIsDragging = true;
medPlayer.Pause();
}
private void sldPosition_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
{
mIsDragging = false;
if (chkPlay.IsChecked.Value)
medPlayer.Play();
}
private void sldPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
var pos = TimeSpan.FromMilliseconds(e.NewValue);
lblPosition.Content = string.Format("{0:00}:{1:00}", pos.Minutes, pos.Seconds);
if (!mTick)
{
medPlayer.Position = TimeSpan.FromMilliseconds(sldPosition.Value);
if (medPlayer.Position == medPlayer.NaturalDuration.TimeSpan)
{
chkPlay.IsChecked = false;
medPlayer.Stop();
}
}
}