Изменение фонового изображения окна WPF в коде C#
у меня есть несколько изображений, настроенных как ресурсы приложения.
когда мое приложение запускается, фон главного окна устанавливается через XAML:
<Window.Background>
    <ImageBrush ImageSource="/myapp;component/Images/icon.png" />
</Window.Background>
если происходит определенное событие, я хотел бы изменить этот фон на другой ресурс ("/myapp;component/Images/icon_gray.png").
Я пробовал использовать две константы:
private static readonly ImageBrush ENABLED_BACKGROUND =
    new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon.png")));
private static readonly ImageBrush DISABLED_BACKGROUND =
    new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon_gray.png")));
... но, естественно, я получаю исключение на зиму.
есть ли простой способ изменить фоновое изображение (через this.Background = ...) окна WPF с использованием Uri пакета или ресурса (т. е.:Myapp.Properties.Resources.icon)? 
6 ответов
Как насчет этого:
new ImageBrush(new BitmapImage(new Uri(BaseUriHelper.GetBaseUri(this), "Images/icon.png")))
или так:
this.Background = new ImageBrush(new BitmapImage(new Uri(@"pack://application:,,,/myapp;component/Images/icon.png")));
здесь версия XAML
<Window.Background>
    <ImageBrush>
        <ImageBrush.ImageSource>
            <BitmapImage UriSource="//your source .."/>
        </ImageBrush.ImageSource>
    </ImageBrush>
</Window.Background>
проблема в том, как вы используете его в коде. Просто попробуйте приведенный ниже код
public partial class MainView : Window
{
    public MainView()
    {
        InitializeComponent();
        ImageBrush myBrush = new ImageBrush();
        myBrush.ImageSource =
            new BitmapImage(new Uri("pack://application:,,,/icon.jpg", UriKind.Absolute));
        this.Background = myBrush;
    }
}
вы можете найти более подробную информацию об этом в 
http://msdn.microsoft.com/en-us/library/aa970069.aspx
Я просто помещаю одно изображение в  "D drive-- > Data-->IMG". Имя изображения x.jpg:
и на C# код типа
ImageBrush myBrush = new ImageBrush();
myBrush.ImageSource = new BitmapImage(new Uri(BaseUriHelper.GetBaseUri(this), "D:\Data\IMG\x.jpg"));
(пожалуйста, поместите двойную косую черту между путями)
this.Background = myBrush;
наконец-то я получил фон.. 
Uri resourceUri = new Uri(@"/cCleaner;component/Images/cleanerblack.png", UriKind.Relative);
            StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri);
            BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream);
            var brush = new ImageBrush();
            brush.ImageSource = temp;
            frame8.Background = brush;
Я пробовал все ответы здесь без успеха. Вот самый простой способ сделать это с ms-appx
        ImageBrush myBrush = new ImageBrush();
        Image image = new Image();
        image.Source = new BitmapImage(new Uri(@"ms-appx:///Assets/background.jpg"));
        myBrush.ImageSource = image.Source;
        TheGrid.Background = myBrush;
папка Assets находится на первом уровне моего проекта, поэтому не забудьте изменить путь как удобно.