2017-02-05 19 views
0

Итак, я прочитал некоторые из вопросов здесь, все они с одинаковыми или похожими ответами, я пытаюсь вставить изображение в эллипс из кода.Динамическое заполнение эллипса с изображением png/jpg? ImageBrush не полезен, URI не работает

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, он работает. Есть ли решение этой проблемы?

ответ

1

Сделайте файл изображения ресурсом сборки. Это более практично, чем отдельные файлы содержимого.

image.png Файл должен находиться в папке под названием Art в вашем Visual Studio Project, и это Build Action (в свойствах файла) должен быть установлен в Resource.

Тогда вы будете использовать Resource File Pack URI для доступа к файлу:

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

@Ramin Оба этих коды работают, я просто не понимаю разницу между ресурсами и контентом, так что я на самом деле не знаю, какое чтобы выбрать, я новичок в изображениях в wpf, вы были бы достаточно терпеливы, чтобы объяснить это мне? :) – MicroDev

+0

Файл сборки встраивается в сборку, а файл содержимого - это отдельный файл, который копируется в выходной каталог и должен быть скопирован там во время потенциальной установки приложения. Для файлов изображений нормального размера лучше всего использовать ресурс сборки. Это «типичный» способ управления файлами изображений в приложении WPF. – Clemens

+0

Я думаю, что это вопрос вашего приложения. Это [ссылка] (https://blogs.msdn.microsoft.com/silverlight_sdk/2010/09/16/content-or-resource-filesanother-way-to-load-a-static-xml-file-to-your -приложение /) дает объяснение. – Ron

1

Это работает:

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. Существует изображение в изображений каталог с именем error.png
  2. Нажмите на файл изображения и от окно свойств, набор Построение действия до Содержание, а также установить Копировать в выходной каталог до Копирование всегда.