3

我正在尝试更改 app.xaml 中所有 xaml 页面的背景图像,但未成功。

我正在 App 构造函数中尝试以下操作:

var imageBrush = new ImageBrush
{
    ImageSource = new BitmapImage(new Uri("/Images/SomeBackgroundImage.png", UriKind.Relative))
};

RootFrame.Background = imageBrush;

我不想在页面级别执行此操作,因为所有页面都将具有相同的背景图像,具体取决于用户选择的主题。

关于我在这里做错了什么的想法?

4

3 回答 3

10

我最终做了什么:

我创建了一个根据所选主题选择正确背景图像的方法。

public static ImageBrush GetBackground()
{
    var imageBrush = new ImageBrush();

    if ((Visibility)App.Current.Resources["PhoneLightThemeVisibility"] == Visibility.Visible)
    { 
        imageBrush = new ImageBrush
        {
            ImageSource = new BitmapImage(new Uri("/Images/Background1.png", UriKind.Relative))
        };
    }
    else
    {
        imageBrush = new ImageBrush
        {
            ImageSource = new BitmapImage(new Uri("/Images/Background2.png", UriKind.Relative))
        };
    }

    return imageBrush;
}

在每一页中,我都设置了背景图片。

LayoutRoot.Background = Utils.GetBackground();
于 2012-04-10T11:38:32.400 回答
2

虽然您的代码片段也不适用于我,但使用

RootFrame.Background = App.Current.Resources["MainBackground"] as ImageBrush;

做。您需要将以下内容添加到您的资源字典中App.xaml

<ImageBrush x:Key="MainBackground" ImageSource="/resources/MainBackground.jpg" />
于 2012-12-14T16:16:20.017 回答
0

我使用自定义样式使我的框架背景变为白色:

<ControlTemplate x:Key="WhiteTemplate" TargetType="toolkit:TransitionFrame">
                <Grid x:Name="ClientArea">
                    <Grid.Background>
                        <ImageBrush ImageSource="Images/yourimage.png"
                    </Grid.Background>
                    <ContentPresenter x:Name="FirstContentPresenter"  />
                    <ContentPresenter x:Name="SecondContentPresenter" />

                </Grid>
            </ControlTemplate>

然后,在 App.xaml.cs

private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
        {
            // Set the root visual to allow the application to render
            if (RootVisual != RootFrame)
                RootVisual = RootFrame;

            // Remove this handler since it is no longer needed
            RootFrame.Navigated -= CompleteInitializePhoneApplication;
            // Add this to inject the media element Control template
            RootFrame.Template = Current.Resources["WhiteTemplate"] as ControlTemplate;
        }

请注意,这是使用工具包。如果您不使用它,您可能应该使用“PhoneApplicationFrame”而不是工具包:TransitionFrame

于 2012-04-06T16:06:27.677 回答