如何在WPF中叠加图像?

时间:2014-05-26 08:17:35

标签: c# wpf canvas

我有两张需要重叠的图片。

对于前 - 我需要一个实心矩形顶部的实心圆。所以,我可以看到整个圆圈,但只能看到矩形的角落。我不希望圆圈透明。原始circle.png没有矩形边框。它的边界仅沿着圆的边界。因此,理想情况下,整个圆圈不应与矩形重叠。

这是显示图像的代码:

                BitmapImage src = new BitmapImage();
                src.BeginInit();
                src.UriSource = new Uri(imgpath, UriKind.Absolute);
                src.CacheOption = BitmapCacheOption.OnLoad;
                src.EndInit();
                ImageBrush ib = new ImageBrush(src);
                ib.Viewbox = new Rect(UVRectangle.X / src.PixelWidth, UVRectangle.Y / src.PixelHeight, UVRectangle.Width / src.PixelWidth, UVRectangle.Height / src.PixelHeight);
                gr.Background = ib; //gr is of type Grid

但是,如果我将此函数调用两次,则第二个图像(圆圈)完全覆盖矩形,因此,我最终会看到画布的背景而不是矩形的角。 / p>

我想我需要合并这两个图像然后再绘制它们。我应该怎么做呢?

2 个答案:

答案 0 :(得分:2)

实际上你可以在XAML中使用普通网格。只需在网格中放置2个图像即可。他们会像这样放在一起:

<Grid>
        <Image Source="/ProjectName;component/Folder/Image1.png"
                                Width="24"
                                Height="24" />
        <!-- Image above Image1 -->
        <Image Source="/ProjectName;component/Folder/Image2.png"
                                Width="24"
                                Height="24" />
    </Grid>

答案 1 :(得分:1)

您在第二次调用时覆盖属性Background。 如果以编程方式将两个图像添加到网格中,它将起作用。变化:

gr.Background = ib;

要:

Image image = new Image();
image.Source = ib.ImageSource;  
gr.Children.Add(image);