2012-04-06 205 views
3

我試圖更改app.xaml中所有我的xaml頁面的背景圖像,但未成功。Windows Phone應用程序背景圖像

我想接下來,在App構造函數:

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

RootFrame.Background = imageBrush; 

我不想在頁面級別要做到這一點,因爲所有的網頁將根據所選擇的主題具有相同的背景圖片由用戶。

我在做什麼錯在這裏的想法?

+0

你可以很容易地在每個頁面上的屬性添加到BaseViewModel並綁定到它(你很可能使用查找和替換做出改變,甚至) – 2012-04-06 15:57:18

+0

我不想在頁面級別執行此操作。爲什麼在應用程序級別可以完成每個頁面的添加?我會把你的想法留在我的後兜裏,以防我不清楚。感謝這個想法。 – Dante 2012-04-06 15:59:16

回答

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(); 
+1

buildaction應該是圖像的內容 – Naresh 2013-03-10 16:36:40

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

請注意,如果您AREN這是使用工具包.. 't使用它,你應該使用'PhoneApplicationFrame'而不是工具箱:TransitionFrame

+0

你的想法很有意思,但是爲了改變所有頁面的背景圖像而創建一個模板看起來對我來說太過分了。爲什麼我的原始代碼沒有工作?這是我的主要問題... – Dante 2012-04-06 16:43:33

2

雖然你的代碼片段並沒有爲我工作之一,使用

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

一樣。您需要添加以下到你的資源字典中App.xaml

<ImageBrush x:Key="MainBackground" ImageSource="/resources/MainBackground.jpg" /> 
相關問題