Изменить фоновое изображение окна WPF в коде C # - PullRequest
26 голосов
/ 24 октября 2010

У меня есть пара изображений, настроенных как ресурсы приложения.

Когда мое приложение запускается, фон главного окна задается с помощью 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")));

... но, естественно, я получаюисключение с неверным URI.

Существует ли простой способ изменить фоновое изображение (через this.Background = ...) окна WPF, используя либо пакетный Uri, либо ресурс (т. е. Myapp.Properties.Resources.icon)?

Ответы [ 7 ]

38 голосов
/ 24 октября 2010

Что по этому поводу:

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")));
9 голосов
/ 22 января 2014

Здесь версия XAML

<Window.Background>
    <ImageBrush>
        <ImageBrush.ImageSource>
            <BitmapImage UriSource="//your source .."/>
        </ImageBrush.ImageSource>
    </ImageBrush>
</Window.Background>
6 голосов
/ 24 октября 2010

Проблема в том, как вы используете его в коде.Просто попробуйте следующий код

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

0 голосов
/ 07 марта 2019

img.UriSource = new Uri ("pack: // application: ,,, / images /" + fileName, UriKind.Absolute);

0 голосов
/ 04 июля 2016

Я пробовал все ответы здесь безуспешно. Вот самый простой способ сделать это с помощью 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;

Папка «Ресурсы» находится на первом уровне моего проекта, поэтому не забудьте изменить путь как вам удобно.

0 голосов
/ 16 марта 2016
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;
0 голосов
/ 24 декабря 2015

Я просто помещаю одно изображение в "d диск -> Данные -> 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;

наконец я получил фон .. enter image description here

...