通过后面的代码将网格背景转换为图像

时间:2014-04-02 06:17:03

标签: c# wpf xaml

我想通过后面的代码将网格背景转换为图像,如何做到这一点 -

我试过这个 -

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

它给出了错误 -

  

无法转换类型为System.Windows.Media.SolidColorBrush'的对象。输入' System.Windows.Media.ImageBrush'。

7 个答案:

答案 0 :(得分:1)

我觉得你需要更多地澄清你的要求,因为你可能尝试的可能是错误的做法。我觉得你没有将任何图像设置为网格的背景,而只是一种颜色。

因此,将背景设置为颜色将返回SolidColorBrush,而不是Image,即ImageBrush。

如果您已将其设置为图像背景,那么您的代码将正常工作。但问题是你打算用gridBackImage做什么?因为我觉得我们正在将它转换成不必要的东西。如果你说你打算做什么,最好解决。

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

答案 1 :(得分:0)

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;   

答案 2 :(得分:0)

通过在网格中添加以下代码,您可以轻松地在xaml中实现

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

留给你的是,在解决方案中添加一个名为'Images'的文件夹,并将现有文件添加到新的'Images'文件夹中,在这种情况下称为'bg.png'

答案 3 :(得分:0)

你应该能够像Saritha.S.R的回答一样:

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

这就是你追求的目标吗?

修改

您的修改:

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

表示您确实没有将图像设置为背景。你需要这样的东西:

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

或代码背后:

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;

为此工作。您无法从SolidColorBrush中获取图像

答案 4 :(得分:0)

您可以将背景转换为ImageBrush而不是Image。

ImageBrush img = (Grid_Image.Background as ImageBrush);

答案 5 :(得分:0)

请检查图像背景是否设置为ImageBrush,如

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

然后你可以像你提到的那样抛出代码。

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

答案 6 :(得分:0)

解决了,我的代码是 -  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;
        }