4

Я использую MediaElement для воспроизведения музыки в своем приложении для метро. Я хочу, чтобы музыка продолжала играть, даже если я перейду к другой странице.Global MediaElement, который продолжает играть после перехода на другую страницу

В следующей теме, что вопрос был задан также: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/241ba3b4-3e2a-4f9b-a704-87c7b1be7988/

Я сделал то, что JimMan предложил 1) В App.xaml.cs Измененного шаблон управления корневым фрейма включить MediaElement

var rootFrame = new Frame(); 
rootFrame.Style = Resources["RootFrameStyle"] as Style; 
rootFrame.Navigate(typeof(HomePage), MainViewModel.Instance); 
Window.Current.Content = rootFrame; 
Window.Current.Activate(); 

2) В Styles.xaml добавить

<Style x:Key="RootFrameStyle" TargetType="Frame"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Frame"> 
       <Grid> 
        <MediaElement x:Name="MediaPlayer" AudioCategory="BackgroundCapableMedia" AutoPlay="True" /> 
        <ContentPresenter /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

3) Чтобы получить доступ к MediaElement о п Page навигацию к:

DendencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content, 0);  
MediaElement rootMediaElement = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 0); 

Но VisualTreeHelper.GetChild (Window.Current.Content, 0); всегда возвращает null, даже если я пытаюсь получить доступ к MediaElemt на странице Root.

Я построил небольшой пример проекта для демонстрации.

Sample Project

Любые идеи? Спасибо заранее!

С наилучшими пожеланиями Fabian

ответ

2

Это возможно обработчик, переключение, когда вы пытаетесь получить визуальное дерево ребенка вызывается до того, как визуальное дерево полностью загружен (добавляется к визуальному дереву). Вы можете попробовать переместить код в обработчик события Loaded.

EDIT *

Я подтвердил свою теорию, сделав следующее изменение:

public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     this.Loaded += OnLoaded; 
    } 

    private void OnLoaded(object sender, RoutedEventArgs e) 
    { 
     DependencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content, 0); 
     MediaElement rootMediaElement = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 0); 
    } 
} 
+0

Нет результат IST то же, что для меня это выглядит как MediaElement не помещается должным образом в корневом фрейме. – elDietze

+0

Это действительно сработало для меня. (заметьте, я использую Release Preview, хотя это не имеет значения) –

+0

Большое спасибо! Теперь он работает. Ваше следующее пиво (даже если только виртуальное) на мне! ! [Пиво] (http://images.derberater.de/files/imagecache/456xXXX_berater/berater/slides/Bier-erfunden.jpg). Приветствую Fabian – elDietze

Смежные вопросы