C# 如何在WPF中覆盖图像?

C# 如何在WPF中覆盖图像?,c#,wpf,canvas,C#,Wpf,Canvas,我有两个图像需要重叠 例如,我需要一个实心矩形上的实心圆。所以,我可以看到整个圆,但只有矩形的角。我不希望圆圈是透明的。原始的circle.png没有矩形边框。其边界仅沿圆的边界。因此,理想情况下,整个圆不应与矩形重叠 这是用于显示图像的代码: BitmapImage src = new BitmapImage(); src.BeginInit(); src.UriSource = new Uri(i

我有两个图像需要重叠

例如,我需要一个实心矩形上的实心圆。所以,我可以看到整个圆,但只有矩形的角。我不希望圆圈是透明的。原始的
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
但是,如果我调用此函数两次,第二个图像(圆)将完全覆盖矩形,因此,我最终看到的是画布的背景,而不是矩形的角


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

实际上,您可以在XAML中创建一个普通的网格。只需在网格内放置两个图像。它们将被放置在彼此上方,如下所示:

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

您可以用第二次调用覆盖属性背景。 如果以编程方式将两个图像添加到网格中,它将起作用。更改:

gr.Background = ib;
致:


获取错误:“System.Windows.Controls.UIElementCollection.Add(System.Windows.UIElement)”的最佳重载方法匹配项具有一些无效的参数Gument1:无法从“System.Windows.Media.ImageBrush”转换为“System.Windows.UIElement”获取另一个错误:
非静态字段、方法需要对象引用,或属性“System.Windows.Controls.Image.Source.get”
联机
Image.Source=ib.ImageSourceSry-man。另一个错误。我应该多睡一会儿!将大写字母I从图像改为小写字母I通常我不会在公共场合共享我的私人电子邮件地址。对不起,图像可以动态更改。所以,我需要用代码来做。有点像@Claudio建议的那样,只要图像数量不变,您仍然可以对ImageSource进行数据绑定。否则你当然可以使用克劳迪奥的建议。
Image image = new Image();
image.Source = ib.ImageSource;  
gr.Children.Add(image);