Изменение фонового изображения окна WPF в коде С#
У меня есть пара изображений, настроенных как ресурсы приложения.
Когда мое приложение запускается, фон главного окна устанавливается через 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
)?
Ответы
Ответ 1
Как насчет этого:
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")));
Ответ 2
Здесь версия Xaml
<Window.Background>
<ImageBrush>
<ImageBrush.ImageSource>
<BitmapImage UriSource="//your source .."/>
</ImageBrush.ImageSource>
</ImageBrush>
</Window.Background>
Ответ 3
Проблема заключается в том, как вы используете его в коде. Просто попробуйте приведенный ниже код
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
Ответ 4
Я просто поместил одно изображение в "d диск → Данные → IMG" . Название изображения x.jpg
:
И на тип кода С#
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]()
Ответ 5
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;
Ответ 6
Я пробовал все ответы здесь без успеха. Вот простейший способ сделать это с помощью 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;
Папка "Активы" находится на первом уровне моего проекта, поэтому не забудьте изменить путь как удобный.