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)?

25
demandé sur Alexander Farber 2010-10-24 22:43:30

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")));
35
répondu Darko Kenda 2010-10-24 19:02:17

Voici la Version XAML

<Window.Background>
    <ImageBrush>
        <ImageBrush.ImageSource>
            <BitmapImage UriSource="//your source .."/>
        </ImageBrush.ImageSource>
    </ImageBrush>
</Window.Background>
7
répondu WiiMaxx 2018-07-20 12:16:33

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

6
répondu GuruC 2010-10-24 19:16:35

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.. enter image description here

0
répondu jigarsinh thakor 2015-12-24 19:05:19
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
répondu Jeetendra negi 2016-03-16 14:22:43

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.

0
répondu Samidjo 2016-07-04 11:29:17