用 png/jpg 图像动态填充椭圆? ImageBrush 没有帮助,URI 不工作

Dynamically Fill Ellipse with png/jpg image? ImageBrush not helpful, URI not working

好的,所以我已经阅读了这里的一些问题,所有问题都有相同或相似的答案,我正在尝试通过代码将图像插入椭圆。

ImageBrush ib = new ImageBrush();
        ib.ImageSource = new BitmapImage(new Uri("Art/image.png", UriKind.Relative));
        Sun.Fill = ib;

使用此代码没有任何反应,我出现黑屏并且还丢失了一些对象。 我更改了代码,删除了 UriKind,将其更改为 absolute,更改为 RelativeOrAbsolute,我尝试使用 @"Art\image.png"。所有加起来都是一样的。 但是当我在 XAML 中执行时,它起作用了。 这个问题有解决办法吗?

这个有效:

var d = new System.Windows.Shapes.Ellipse();
ImageBrush ib = new ImageBrush();
ib.ImageSource = new System.Windows.Media.Imaging.BitmapImage(new Uri("images/error.png", UriKind.Relative));
d.Fill = ib;

this.Content = d; // assuming the parent is a Window

注意两点:

  1. images 目录中有一个名为 error.png
  2. 的图像
  3. 单击图像文件并从属性 window 中,将 Build Action 设置为 Content 并设置 复制到输出目录始终复制

使图像文件成为程序集资源。这比单独的内容文件更实用。

文件 image.png 应位于 Visual Studio 项目中名为 Art 的文件夹中,并且其 Build Action(在文件的属性中)应设置为Resource.

然后您将使用 Resource File Pack URI 访问文件:

ib.ImageSource = new BitmapImage(new Uri("pack://application:,,,/Art/image.png"));