2013-07-10 49 views
1

我想以某種方式自定義PhoneApplicationFrame,但我不明白我該如何繼續。PhoneApplicationFrame自定義沒有效果

讓我解釋一下:我正在研究一個WP8應用程序,我想要一個背景聲音和聲音效果(同時)。在詢問幫助後,this post,我被告知使用MediaElement並將其添加到PhoneApplicationFrameXAML(這是否正確?)。

我有什麼在這個問題上做:

我創建了一個框架(稱爲IntroFrame),並將其設置爲RootFrameApp.xaml.cs文件。因此,它是:

public partial class App 
{ 
    public static IntroFrame RootFrame {get; private set;} 
    ... 
} 

而在InitializePhoneApplication方法,我適應代碼:

private void InitializePhoneApplication() 
{ 
    ... 
    RootFrame = new IntroFrame(); 
    RootFrame.Navigated += CompleteInitializePhoneApplication; 
    ... 
} 

在XAML中,我試圖添加MediaElement

<phone:PhoneApplicationFrame 
    x:Class="PazaakPhone.IntroFrame" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    mc:Ignorable="d" 
    shell:SystemTray.IsVisible="True"> 

    <MediaElement x:Name="BackgroundMedia" Source="Assets/Audio/bgm.mp3" AutoPlay="True" /> 
</phone:PhoneApplicationFrame> 

的框架似乎很好,我嘗試了高度技巧,如here,它工作。但是,我試圖自定義該框架,添加視覺元素,更改MediaElement,沒有任何影響。我猜PhoneApplicationFrame不能有內容像PhoneApplicationPage?我認爲我可以在後臺執行此操作,而框架則承載所有其他頁面。但是,無論我走錯了路,還是錯過了一些東西。會是什麼呢?

回答

4

您可以通過重新模板化的PhoneApplicationFrame實現這一點:

<Application.Resources> 
    <Style x:Key="myPhoneApplicationFrameStyle" TargetType="phone:PhoneApplicationFrame"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="phone:PhoneApplicationFrame"> 
        <Grid x:Name="MediaElementContainer" Margin="0"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <MediaElement Grid.Row="0" x:Name="MediaElement" Source="Assets/Audio/bgm.mp3" AutoPlay="True" Volume="1.0" Visibility="Collapsed" /> 
         <Grid Grid.Row="1" x:Name="ClientArea"> 
          <ContentPresenter /> 
         </Grid> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Application.Resources> 

,然後設置樣式在app.cs:

private void InitializePhoneApplication() 
{ 
    if (phoneApplicationInitialized) 
     return; 

    RootFrame = new PhoneApplicationFrame { Style = Resources["myPhoneApplicationFrameStyle"] as Style }; 
    RootFrame.Navigated += CompleteInitializePhoneApplication; 
    RootFrame.NavigationFailed += RootFrame_NavigationFailed; 

    // Ensure we don't initialize again 
    phoneApplicationInitialized = true; 
} 
+0

謝謝@cadessi的回答。儘管它確實解決了運行聲音的問題,但它將我帶到MainPage並僅顯示標題(標題),而其餘的頁面內容未顯示。我試圖修改樣式,以便顯示所有頁面,但無論我做什麼修改,它總是會導致異常。 – VasileF

+0

由於MediaElement已摺疊,因此框架中顯示的任何頁面都應該顯示整個屏幕。請使用新的空白Windows Phone應用程序嘗試上面的代碼。 –

+0

謝謝你,它爲MediaElement播放背景音效。但似乎許多控件只是從用戶界面消失 - 列表框,列表選擇器,圖像等。如果我明確設置了Horizo​​ntalAlignment屬性,所有UI元素似乎都消失了。我的應用中的所有頁面都處於橫向模式,是否會干擾樣式的某些默認屬性? – VasileF