Archive
Posts Tagged ‘MediaEnded’
Gotcha: MediaElement must be in visual tree for MediaOpened, MediaEnded to be fired
2014/11/18
Leave a comment
At ClipFlair’s AudioRecorderControl (used in Captions/Revoicing component of ClipFlair Studio), I use the following code to initialize a MediaElement to use for playback.
After a long time a found out that if the MediaElement is not in the visual tree (for example defined in XAML, or defined in code and then added to the visual tree), then it will not always fire MediaOpened and MediaEnded events, which are crucial if you want to have a two-state Play/Stop button (a ToggleButton).
public MediaElement Player { get { return player; }
set {
if (player != null) {
player.MediaOpened -= MediaElement_MediaOpened;
player.MediaEnded -= MediaElement_MediaEnded;
}
player = value;
if (player != null) {
player.MediaOpened += MediaElement_MediaOpened;
player.MediaEnded += MediaElement_MediaEnded;
player.AutoPlay = false;
player.PlaybackRate = 1.0;
player.Balance = 0;
Volume = DEFAULT_VOLUME;
}
} }
protected void MediaElement_MediaOpened(object sender, RoutedEventArgs e) {
try {
//player.Position = TimeSpan.Zero;
player.Stop(); //this stops current playback (if any) and rewinds
player.Play();
} catch (Exception ex) {
PlayCommandUncheck(); //depress playback toggle button
//don't talk to ToggleButton directly
Status = MSG_PLAY_FAILED + ex.Message;
} }
protected void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
PlayCommandUncheck(); //depress play button to stop playback
//don't talk to ToggleButton directly }
Categories: Posts
ClipFlair, Events, Gotcha, Media, MediaElement, MediaEnded, MediaOpened, Player, Silverlight