2012-04-08 13 views
0

In meiner WP7-Anwendung verwenden alle Seiten einen ImageBrush als Hintergrund, den ich in einem ResourceDictionay definiert habe. Dieses ResourceDictionary wird global über App.xaml zusammengeführt. Die ImageBrush im Resource ist wie folgt definiert:ImageBrush von ResourceDictionary zur Laufzeit aktualisieren

<ImageBrush x:Key="PhonePageBackground" ImageSource="/Background1.jpg"/> 

Im das Image der ImageBrush zur Laufzeit zu aktualisieren versucht, aber es funktioniert nicht.

einige Tests machen, wo ich eine Seite mit einem Knopf auf sie haben, um den Hintergrund zu ändern, wurde mir klar, dass der folgende Code funktioniert:

ImageBrush image; 

    public MainPage() 
    { 
     InitializeComponent(); 

     image = new ImageBrush { ImageSource = new BitmapImage(new Uri("/Background1.jpg", UriKind.Relative)) }; 

     LayoutRoot.Background = image; 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     image.ImageSource = new BitmapImage(new Uri("/Background2.jpg", UriKind.Relative)); 
    } 

Aber der Code unten, wo ich die ImageBrush verwenden aus das Wörterbuch, funktioniert nicht. Der Hintergrund der Seite wird transparent, als ob das Bild nicht gefunden werden kann:

ImageBrush image; 

    public MainPage() 
    { 
     InitializeComponent(); 

     image = (ImageBrush)Application.Current.Resources["PhonePageBackground"]; 

     LayoutRoot.Background = image; 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     image.ImageSource = new BitmapImage(new Uri("/Background2.jpg", UriKind.Relative)); 
    } 

Beiden Bilder (Background1.jpg und Background2.jpg) baut Aktion wird als Inhalt gesetzt. Ich habe mit Resource Set getestet, aber ohne Erfolg.

Irgendwelche Kenntnisse darüber, warum dieses Verhalten?

Antwort

1

Das funktioniert für mich.

ImageBrush image; 
     public MainPage()     
     { 
      InitializeComponent(); 

      image = (ImageBrush)Application.Current.Resources["PhonePageBackground"]; 
      LayoutRoot.Background = image; 
     } 


private void button1_Click(object sender, RoutedEventArgs e) 
     { 

      image = new ImageBrush { ImageSource = new BitmapImage(new Uri("/Background2.jpg", UriKind.Relative)) }; 
      LayoutRoot.Background = image; 
    } 
+0

Das funktioniert zwar, aber es ist nicht was ich versuche zu erreichen. Sie aktualisieren das LayoutRoot.Background, nicht aber ImageBrush im Ressourcenwörterbuch. Ich möchte, dass sowohl der Hintergrund als auch die ImageBrush-Ressource aktualisiert werden. Das Problem wurde in meinem anderen Post [hier] behoben (http://forums.create.msdn.com/forums/t/102679.aspx) – dferrazm