Как использовать ресурсы.resx для связывания изображений
Я включил файл значков в свои ресурсы.resx, который я хотел бы показать на TreeViewItem, который находится внутри stackpanel.
1)может .ICO файлы будут использоваться для этой цели? Или так и должно быть .bmp или jpg?
2) Что вы устанавливаете в качестве источника в XAML? Следующий код не работал для меня
<StackPanel Orientation="Horizontal">
<Image Margin="2" Source="/Resources/Folder_Back.ico" />
<TextBlock Margin="2" Text="{Binding ProgramName}"
Foreground="White" FontWeight="Bold"/>
</StackPanel>
3 ответов
вы не можете этого сделать. это работало только в WinForms
см. Этот пост для получения дополнительной информации
по-другому, как добавить изображение в ресурсы
используйте метод, показанный в этом сообщении
цитата:
если вы будете использовать изображение в нескольких местах, то стоит загрузить данные изображения только один раз в память, а затем поделиться им между всеми Image
элементы.
для этого создано!--30-->BitmapSource
как ресурс где-то:
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />
затем в вашем коде используйте что-то вроде:
<Image Source="{StaticResource MyImageSource}" />
в моем случае, я обнаружил, что мне пришлось установить Image.png
файл, чтобы иметь действие сборки Resource
а не просто Content
. Это приводит к переносу изображения в скомпилированную сборку.
вот трюк для доступа к изображению в файле ресурсов:
доступ к изображению из файла ресурсов в разметке XAML
сначала вам нужно добавить ссылку на свойства проекта следующим образом:
xmlns:properties="clr-namespace:MyProject.Properties"
а затем получить доступ к нему через XAML следующим образом:
<image source="{Binding Source={x:Static properties:Resources.ImageName}}" />
вы можете использовать PNG/JPG / BMP, а также файл ICO, но все рекомендуют PNG.
чтобы сделать решение работы Qorbani, добавьте конвертер в Источник изображения.Связывание!
в XAML пространства имен
xmlns:properties="clr-namespace:YourNameSpace.Properties"
xmlns:converter="clr-namespace:YourNameSpace.Converter"
Xaml-Resource (UserControl или Window)
<UserControl.Resources>
<ResourceDictionary>
<converter:BitmapToImageSourceConverter x:Key="BitmapToImageSourceConverter" />
</ResourceDictionary>
</UserControl.Resources>
Код Xaml
<StackPanel Orientation="Horizontal">
<Image Width="32" Height="32" Source="{Binding Source={x:Static properties:Resources.Import}, Converter={StaticResource BitmapToImageSourceConverter}}" Stretch="Fill" />
<TextBlock Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center">Import</TextBlock>
</StackPanel>
BitmapToImageSourceConverter.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace YourNameSpace
{
public class BitmapToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var bitmap = value as System.Drawing.Bitmap;
if (bitmap == null)
throw new ArgumentNullException("bitmap");
var rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
var bitmapData = bitmap.LockBits(
rect,
ImageLockMode.ReadWrite,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
try
{
var size = (rect.Width * rect.Height) * 4;
return BitmapSource.Create(
bitmap.Width,
bitmap.Height,
bitmap.HorizontalResolution,
bitmap.VerticalResolution,
PixelFormats.Bgra32,
null,
bitmapData.Scan0,
size,
bitmapData.Stride);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}