NikitaGupta
NikitaGupta

Reputation: 56

Convert the grid background to image through code behind

I want to convert the grid background to image through code behind,how to do this-

I have tried this-

ImageBrush gridBackground = (ImageBrush)(((Grid)sender).Background);
System.Windows.Controls.Image gridBackImage = new System.Windows.Controls.Image();
gridBackImage.Source = gridBackground.ImageSource;

it is giving error-

Unable to cast object of type 'System.Windows.Media.SolidColorBrush' to type 'System.Windows.Media.ImageBrush'.

Upvotes: 0

Views: 1172

Answers (7)

NikitaGupta
NikitaGupta

Reputation: 56

Solved,My code is- ImageBrush gridBackground;

        if (((Grid)sender).Children.Count > 0)
        {
            gridBackground = (ImageBrush)(((Grid)sender).Background);
            System.Windows.Controls.Image gridBackImage = new System.Windows.Controls.Image();
            gridBackImage.Source = gridBackground.ImageSource;

            ImageCar.Source = gridBackImage.Source;
        }

Upvotes: 0

Carbine
Carbine

Reputation: 7903

I feel you need to clarify your requirements more, because what you might be attempting might be a wrong approach. I feel you haven't set any image to the background of the grid but only a color.

So setting background to a color it will return an SolidColorBrush and not an Image, i.e. ImageBrush.

If you have set it to an Image background then your code will work fine. But the question is what is that you are intending to do with gridBackImage? because I feel we are converting it to something which is not necessary. If you say what you intent to do it would be better to solve.

var grid = sender as Grid;
Image gridBackImage =new Image();
gridBackImage.Source = grid.Background.ImageSource;

Upvotes: 1

Divya
Divya

Reputation: 102

Please check whether the Image Background is set as ImageBrush, like

   <Grid Height="300" Width="100" x:Name="Grid_Image">
        <Grid.Background>
            <ImageBrush ImageSource="ms-appx:///Assets/SmallLogo.scale-100.png"/>
        </Grid.Background>
    </Grid>

Then you can cast in code behind as mentioned by you.

    ImageBrush im = ((ImageBrush)(((Grid)sender).Background); 
    Image gridBackImage =new Image();
    gridBackImage.Source = im.ImageSource;

Upvotes: 0

FishySwede
FishySwede

Reputation: 1583

You should be able to reverse Saritha.S.R's answer like:

ImageBrush myBrush = (ImageBrush)(((Grid)sender).Background);
Image image = new Image();
image.Source = myBrush.ImageSource;

Is that what you're after?

Edit:

Your edit:

Unable to cast object of type 'System.Windows.Media.SolidColorBrush' to type System.Windows.Media.ImageBrush'.

Indicates that you don't really have an image set as background. You need something like:

<Grid.Background>
    <ImageBrush ImageSource="YourBackgroundImage.jpg"/>
</Grid.Background>

Or in code behind:

ImageBrush myBrush = new ImageBrush();
Image image = new Image();
image.Source = new BitmapImage(
    new Uri("pack://application:,,,/YourProject;component/YourBackgroundImage.jpg"));
myBrush.ImageSource = image.Source;
yourGrid.Background = myBrush;

For this to work. You simply can't get an image from a SolidColorBrush

Upvotes: 0

Divya
Divya

Reputation: 102

You can convert the Backround to ImageBrush instead of Image.

ImageBrush img = (Grid_Image.Background as ImageBrush);

Upvotes: 0

Mohd Ahmed
Mohd Ahmed

Reputation: 1482

You can easily be acheived in the xaml by adding the following code in the grid

<Grid>
    <Grid.Background>  
        <ImageBrush ImageSource="/MyProject;component/Images/bg.png"/>     
    </Grid.Background>
</Grid>

Left for you to do, is adding a folder to the solution called 'Images' and adding an existing file to your new 'Images' folder, in this case called 'bg.png'

Upvotes: 0

Saritha.S.R
Saritha.S.R

Reputation: 800

ImageBrush myBrush = new ImageBrush();
  Image image = new Image();
  image.Source = new BitmapImage(
      new Uri(
         "pack://application:,,,/MyClassLibrary;/Images/Image1.jpg"));
  myBrush.ImageSource = image.Source;
  Grid grid = (Grid)sender;
  grid.Background = myBrush;   

Upvotes: 0

Related Questions