Вместо использования свойства NavigateUri в HyperlinkButton вы можете воспроизвести видео внутри MediaElement на отдельной странице.
Сначала добавьте новую страницу в свой проект (MoviePlayer.xaml) и поместите один элемент MediaElement вЭто.Обработайте событие MediaElement.Loaded в коде, а также подключите события OnNavigatedTo и OnNavigatingFrom:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var qs = NavigationContext.QueryString["url"];
MyMovie.Source = new Uri(qs, UriKind.Absolute);
}
protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
{
MyMovie.Stop();
base.OnNavigatingFrom(e);
}
private void MyMovie_Loaded(object sender, RoutedEventArgs e)
{
MyMovie.Position = new TimeSpan(0);
MyMovie.Play();
}
Затем на главной странице измените HyperlinkButton для обработки события Click вместо установки свойства NavigateUri.и запустите что-то вроде этого:
private void HyperlinkButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
var button = sender as HyperlinkButton;
var video = button.DataContext as VideoWrapperClass; // name, url, playing time, etc.
NavigationService.Navigate(new Uri("/MoviePlayer.xaml?url=" + video.Url, UriKind.Relative));
}
Вот и все!При таком подходе вы также можете настроить воспроизведение, если хотите, или запустить некоторые пользовательские анимации, такие как бамперы или рекламные наложения.
Если вы предпочитаете использовать решение типа MVVM, просто нажмите на меняТвиттер на @chriskoenig, и я застрелю тебя за что-нибудь.
/ chris