2011-01-22 94 views
2

我需要創建一個MediaElement,當我導航到我的應用程序中的不同頁面時,它將繼續播放。任何想法如何做到這一點?使用Windows Phone 7時,如何創建全局MediaElement?

+0

經典...一旦我創建一個問題,答案就會出現:)剛剛添加了一個屬性,該屬性保存mediaelement,該屬性在沒有父級的Popup上設置爲子級。 – 2011-01-22 10:25:22

回答

1

我其實剛剛找到了解決方案。如果你想擁有的情況下,任何人跑進了同樣的問題...

0

我不認爲這是可能的。

MediaElement是一個UIElement必須託管在一個頁面內工作。

每次瀏覽時,都會在WP7中加載一個新頁面實例。一個非常醜陋的黑客可能會奏效,但我不推薦它。

你想做什麼?

您可以記住它的位置並在頁面上重新啓動它。

0

- 甚至更早之前,一旦你記下一個問題你的作品自己:)

private MediaElement _mediaElement; 

... 

_mediaElement = new MediaElement {Volume = 1, AutoPlay = false}; 
var _pop = new Popup {Child = _mediaElement, IsOpen = true}; 

這工作的想法音樂將在整個應用程序中播放,請考慮使用MediaPlayer類。

0

我有一個類似的問題,我發佈在我的博客soltuion

Windows Phone 7的Silverlight基於頁面導航系統。關鍵點是頁面的生命週期 - 當您導航到另一頁面時,每個頁面都會被刪除。要在整個應用程序生命週期中擁有一個對象(例如單例),它可以放在App類(App.xaml.cs文件)中。 MediaElement絕對是一個應該是一個的對象(必須只有一個音樂播放器)。最好的和簡單的解決方法是放置的MediaElement在XAML(它需要可視化樹的一部分),我已經使用的應用程序資源:

<!--Application Resources--> 
    <Application.Resources> 
     <MediaElement x:Name="mediaPlayer" Source="/Sound/horrorSong.mp3" AutoPlay="False" /> 
    </Application.Resources> 

然後從任何網頁使用資源字典得到它:

MediaElement player = null; // get the media element from App resources 
if (App.Current.Resources.Contains("mediaPlayer")) 
{ 
    player = App.Current.Resources["mediaPlayer"] as MediaElement; 
} 
if (player != null) 
{ 
    player.Play(); 
} 

值得注意的是MediaElement無法在Zune連接時播放音樂。提示用戶這是一個好主意。在方法

if (NetworkInterface.GetIsNetworkAvailable()) 
{ 
    if (NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet) 
    { 
      zuneTextBlock.Visibility = System.Windows.Visibility.Visible; 
      return; 
    } 
} 
    zuneTextBlock.Visibility = System.Windows.Visibility.Collapsed; 

此代碼保證,如果Zune播放器上(用戶仍然可以有插入手機),但極有可能是Zune播放器正在運行(Zune播放器,同時手機連接開始)。

+0

+1 - 爲什麼這次被拒絕?很有幫助。 – 2013-01-19 21:41:58

0

或者,您可以重新設置PhoneApplicationFrame的模板並將其放在那裏。我在我的應用程序中使用了這個解決方案,我比彈出的解決方案更喜歡它,因爲如果您想要控件和內容,可以將mediaelement與其他所有內容(比如appbar)一起佈局。

相關問題