Search code examples
c#win-universal-appuwpwindows-10-mobile

Attach Image/ImageBrush from code behind


I'm trying to add an Image as the background of a UserControl. Depending on the value of a variable I need to change that background but whatever the path or Uri format I use, the background does not change.

I've seen lots of questions here in stackoverflow but none fixes my single problem. I let the code below:

            if (callback.liveUvis.ContainsUVI(uvi))
            {
                this.Status.Text = "LIVE";


                ImageBrush imgB = new ImageBrush();
                BitmapImage btpImg = new BitmapImage();                    
                btpImg.UriSource = new Uri(@"///IMG///Live///bck_frame_info_video_live.png", UriKind.Relative);
                //imgB.ImageSource = new BitmapImage(new Uri("~/IMG/Live/bck_frame_info_video_live.png", UriKind.RelativeOrAbsolute));
                //imgB.ImageSource = new BitmapImage(new Uri("ms-appx:///IMG/Live/bck_frame_info_video_live.png"));
                imgB.ImageSource = btpImg;
                this.Background = imgB;
            }

I'm facing the same problem when trying to attach an image... I guess it's up to the Uri format also, but I let the code too just in case :)

    private void setIcon_Desc(string dd)
    {
        try
        {
            Image img = new Image();
            img.Source = new BitmapImage(new Uri(this.BaseUri, "IMG/pictos_small/white/160dpi/" + dd + ".png"));
            img.Stretch = Stretch.None;
            this.Icon = img;
            this.Sport.Text = callback.disc.getDescription(dd).ToUpper();
        }
        catch(Exception ex)
        {
            callback.exception.writeExceptions(ex);
        }

    }

Thanks in advance!


Solution

  • I can reproduce your issue when changing the background of a user control.

    The current workaround I used was changing the background of root UIElement in the control.

    <Grid x:Name="container">
        <Grid.Background>
            <ImageBrush Stretch="Fill" ImageSource="Images/bg-blue.png"/>
        </Grid.Background>
        <StackPanel>
            <TextBlock>Hello World</TextBlock>
            <Button Click="Button_Click">Change Background</Button>
            <Image x:Name="display"></Image>
        </StackPanel>
    </Grid>
    

    public sealed partial class MyUserControl : UserControl
    {
        public MyUserControl()
        {
            this.InitializeComponent();
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ImageBrush imgB = new ImageBrush();
    
            BitmapImage btpImg = new BitmapImage();
    
            btpImg.UriSource = new Uri(@"ms-appx:///images/bg-light-blue.png");
    
            imgB.ImageSource = btpImg;
    
            container.Background = imgB;
        }
    }