Як посилатися на ресурси зображень у XAML?


81

Я поклав елемент Imageкерування на Вікно, і я хотів би відобразити зображення, яке зберігається у файлі ресурсу проекту з назвою "Resources.resx". Ім'я зображення у файлі ресурсу - "Пошук".

Хтось може показати мені, як я можу робити це?

Відповіді:


117

Якщо зображення знаходиться у вашій папці ресурсів і для його дії збірки встановлено значення Ресурс. Ви можете посилатися на зображення в XAML таким чином:

"pack://application:,,,/Resources/Search.png"

Припускаючи, що у вас немає жодної структури папок у папці Resources, а це програма. Наприклад, я використовую:

ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png"

коли у мене є папка RibbonImages у папці Resources.


Що означає простір імен 'pack'?
Hosea146,

2
ось інформація про пакет uri: msdn.microsoft.com/en-us/library/…
Viv

2
Минув деякий час з тих пір, як я додав зображення до свого додатка ... Можливо, я тут подумав, але я думаю, вам може знадобитися побудувати свою програму, перш ніж вона покаже зображення в дизайнері WPF.
Viv

3
Я не можу протестувати це зараз, але за посиланням MSDN вище, для посилань на збірки, там написано використання: "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml". де "ReferencedAssembly" буде назвою вашої збірки. Я написав код, наприклад: "/MyProgram.Namespace;component/Resources/imagename.png"
Viv,

1
@wonea ця робота для мене: "pack: // application: ,,, / YourAppName; component / Resources / FileDialog.png" із складанням дії "Ресурс"
antonio

30

Якщо у вас є зображення в папці «Піктограми» вашого проекту, а його дія побудови - «Ресурс», ви можете звернутися до нього так:

<Image Source="/Icons/play_small.png" />

Це найпростіший спосіб зробити це. Це єдиний спосіб, як я міг зрозуміти, що це робиться суто з точки зору ресурсів і без файлів проекту:

var resourceManager = new ResourceManager(typeof (Resources));
var bitmap = resourceManager.GetObject("Search") as System.Drawing.Bitmap;

var memoryStream = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
memoryStream.Position = 0;

var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();

this.image1.Source = bitmapImage;

17
У цьому є невеликі варіації: <Image Source="/Icons/play_small.png" />Зверніть увагу на косу риску в початку, що означає загляд у кореневій папці. Якщо файл xaml відсутній у кореневій папці, це необхідно, оскільки без косої риски вперед він розпочне пошук у тому ж каталозі, що і файл xaml.
Greg Gum

8

Однією з переваг використання файлу ресурсу є доступ до ресурсів за іменами, тому зображення може змінюватися, ім’я зображення може змінюватися, доки ресурс буде в курсі, відображатиметься правильне зображення.

Ось більш чистий підхід для досягнення цього: Припустимо, Resources.resx знаходиться у просторі імен 'UI.Images', додайте посилання на простір імен у вашому xaml так:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UI="clr-namespace:UI.Images" 

Встановіть джерело зображення так:

<Image Source={Binding {x:Static UI:Resources.Search}} /> де 'Пошук' - це назва ресурсу.


Переконайтеся, що для Ресурсів встановлено загальнодоступність: stackoverflow.com/a/19667704/155892
Марк Совул

3
Насправді це не працює для зображень, оскільки Ресурси використовують System.Drawing.Bitmap
Марк Совул

4
  1. Додайте папки до свого проекту та додайте до них зображення за допомогою "Існуючий елемент".
  2. XAML, подібний до цього: <Image Source="MyRessourceDir\images\addButton.png"/>
  3. F6 (побудова)

<ImageBrush ImageSource = "Assets \ Placeholder.png" /> спрацював у мене, дякую
Варус Септимус

1а. на вкладці Властивості для файлу встановіть BuildAction на "Ресурс"
Річард II
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.