【问题标题】:PhoneApplicationFrame customization has no effectPhoneApplicationFrame自定义没有效果
【发布时间】:2013-07-11 03:07:05
【问题描述】:

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

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

我在这件事上做了什么:

我创建了一个框架(称为 IntroFrame)并将其设置为 App.xaml.cs 文件中的 RootFrame。原来如此:

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 这样的内容?我想我可以在后台执行此操作,而 Frame 托管所有其他页面。但要么我走错了路,要么我错过了一些东西。会是什么?

【问题讨论】:

    标签: c# xaml windows-phone-8 windows-phone


    【解决方案1】:

    您可以通过重新模板化 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;
    }
    

    【讨论】:

    • 感谢@cadessi 的回答。尽管它确实解决了运行声音的问题,但它把我带到了 MainPage 并只显示了标题(标题),其余的页面内容没有显示。我试图修改样式以显示所有页面,但无论我进行什么修改,它总是会导致异常。
    • 由于 MediaElement 已折叠,因此框架中显示的任何页面都应该占据整个屏幕。请用新的空 Windows Phone 应用尝试上面的代码。
    • 谢谢,它可以让 MediaElement 播放背景声音。但似乎许多控件从 UI 中消失了——列表框、列表选择器、图像等等。如果我明确设置 Horizo​​ntalAlignment 属性,所有 UI 元素似乎都会消失。我的应用中的所有页面都处于横向模式,这会干扰样式的某些默认属性吗?
    • 另外,我需要经常访问 MediaElement,我不知道如何引用它。该怎么做?
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2013-04-27
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多