J'ai un MediaElement, mais comment puis-je appeler une fonction quand la propriété "position" de MediaElement change?WPF mediaelement
La position n'est pas DependencyProperty.
J'ai un MediaElement, mais comment puis-je appeler une fonction quand la propriété "position" de MediaElement change?WPF mediaelement
La position n'est pas DependencyProperty.
Je veux juste mettre en place un curseur qui suit la lecture vidéo ... mais la propriété de position n'est pas une propriété de dépendance: s
Vous pouvez utiliser un DispatchTimer. Cet article fournit un bon aperçu sur la façon de fonctionner. MediaElement and More with WPF.
Voici un exemple de code que j'ai pris dans un projet sur lequel je travaille. Il montre la position de la vidéo en utilisant un contrôle curseur et permet à l'utilisateur de changer la position. Je suis un peu un débutant aussi, donc il est possible que certains d'entre eux est faux (n'hésitez pas à commenter les problèmes dans la section commentaires :).
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();
}
}
}
FFME fait position (et la plupart des autres propriétés des médias) une propriété de dépendance. Essaie.
voir http://stackoverflow.com/questions/869761/wpf-implementing-a-mediaplayer-audio-video-seeker pour un bon départ – kenwarner