1

我正在尝试以某种方式自定义 PhoneApplicationFrame,但我不明白我必须如何继续。

让我解释一下:我正在开发一个 WP 8 应用程序,我想要一个背景声音和音效(同时)。在寻求帮助后,在这篇文章中,有人建议我使用 aMediaElement并将其添加XAMLPhoneApplicationFrame(这是正确的吗?)。

我在这件事上做了什么:

我创建了一个框架(称为 IntroFrame)并将其设置为RootFrameinApp.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>

框架看起来不错,我尝试了这里的高度技巧,它奏效了。但是,我尝试自定义该框架,添加视觉元素,更改该 MediaElement 并且什么都没有……没有效果。我想PhoneApplicationFrame不能有像PhoneApplicationPage? 我想我可以在后台执行此操作,而 Frame 托管所有其他页面。但要么我走错了路,要么我错过了一些东西。会是什么呢?

4

1 回答 1

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;
}
于 2013-07-10T14:31:36.687 回答