Modifier l'image de fond de la fenêtre WPF dans le code C#
j'ai quelques Images configurées comme ressources d'application.
quand mon application démarre, le fond de la fenêtre principale est défini via XAML:
<Window.Background>
<ImageBrush ImageSource="/myapp;component/Images/icon.png" />
</Window.Background>
Si un événement donné se produit, j'aimerais changer cette toile de fond à une autre ressource ().
j'ai essayé d'utiliser deux constantes:
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")));
... mais naturellement, j'obtiens une exception avec URI invalide.
Existe-t-il un moyen simple de changer l'image de fond (via this.Background = ...
) d'une fenêtre WPF utilisant soit L'Uri pack soit la ressource (i.e.:Myapp.Properties.Resources.icon
)?
6 réponses
Qu'en ceci:
new ImageBrush(new BitmapImage(new Uri(BaseUriHelper.GetBaseUri(this), "Images/icon.png")))
ou sinon, ceci:
this.Background = new ImageBrush(new BitmapImage(new Uri(@"pack://application:,,,/myapp;component/Images/icon.png")));
Voici la Version XAML
<Window.Background>
<ImageBrush>
<ImageBrush.ImageSource>
<BitmapImage UriSource="//your source .."/>
</ImageBrush.ImageSource>
</ImageBrush>
</Window.Background>
Le problème est la façon dont vous l'utilisez dans le code. Essayez simplement le code ci-dessous
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;
}
}
Vous pouvez trouver plus de détails à ce sujet dans
http://msdn.microsoft.com/en-us/library/aa970069.aspx
je viens de placer une image dans " lecteur d-->-->IMG". Le nom de l'image est x.jpg
:
Et sur le code c# de type
ImageBrush myBrush = new ImageBrush();
myBrush.ImageSource = new BitmapImage(new Uri(BaseUriHelper.GetBaseUri(this), "D:\Data\IMG\x.jpg"));
(merci de mettre le double slash entre le chemin)
this.Background = myBrush;
finalement j'ai eu le fond..
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;
j'ai essayé toutes les réponses ici, sans succès. Voici la façon la plus simple de le faire avec 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;
le dossier des actifs est dans le premier niveau de mon projet, alors assurez-vous de changer le chemin comme pratique.