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;
        }

これはToolkitを使用していることに注意してください。使用していない場合は、toolkit:TransitionFrameの代わりに「PhoneApplicationFrame」を使用する必要があります。

于 2012-04-06T16:06:27.677 に答える