2012-04-08 67 views
0

在我的WP7应用程序中,所有页面都使用ImageBrush作为我在ResourceDictionay中定义的背景。这个ResourceDictionary是通过App.xaml全局合并的。在ResourceDictionary中的图像刷的定义是这样的:在运行时从ResourceDictionary更新ImageBrush

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

我试着在运行时更新图像刷的ImageSource的,但它不工作。

制作一些测试,在那里我有上有一个按钮,一个页面来改变的背景下,我意识到,下面的代码工作正常:

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

但下面的代码,在这里我用的是图像刷从字典,不起作用。页面的背景变得透明,好像图像无法找到:

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

这两个图像(Background1.jpg和Background2.jpg)构建操作都设置为内容。我已经测试过资源集,但没有成功。

为什么会出现这种行为的任何知识?

回答

1

这适用于我。

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

这确实有效,但它不是我想要完成的。您正在更新LayoutRoot.Background,但不是资源字典中的ImageBrush。我想要更新背景和ImageBrush资源。该问题已在我的另一篇文章[here]中得到解决(http://forums.create.msdn.com/forums/t/102679.aspx) – dferrazm 2012-04-09 13:44:00