Привязать изображение к сетке данных, используя ресурсы - PullRequest
0 голосов
/ 02 июня 2011

Я пытаюсь извлечь изображение из файла ресурсов и пытаюсь связать его с сеткой данных моего приложения WPF.

Сетка данных выглядит примерно так:

<DataGridTemplateColumn Header="Image" Width="45">
  <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image  Source="{Binding Path=Icon}" />
                    </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>

И Image - это свойство типа image моего класса MVVm, например:

 public Image Icon
    {
        get { return _licenseImage; }
        set { _licenseImage = value;
        PropertChanged("Icon");}
    }

И в коде, стоящем за Im, я пытаюсь сделать что-то подобное, чтобы получить изображение из файла ресурсов, и пытаюсь связать его со столбцом таблицы данных.

ResourceManager resourceManager = 
        new ResourceManager("Resources.Images", Assembly.GetExecutingAssembly());
BitMap bitmap = resourceManager.GetObject("okimage") as BitMap;

Image image = bitmap;
return image;

Я вижу, что изображение заполнено, но оно не отображается в сетке.

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Вы должны привязать к ImageSource вместо Image.

мы используем этот вспомогательный класс:

public static class ImageSourceHelper
{
    public static ImageSource GetResourceImage(string resourcePath)
    {
        return GetResourceImage(Assembly.GetCallingAssembly(), resourcePath);
    }

    public static ImageSource GetResourceImage(Assembly resourceAssembly, string resourcePath)
    {
        if (string.IsNullOrEmpty(resourcePath)) return null;

        var assembly = resourceAssembly.GetName().Name;
        const string uriFormat = "pack://application:,,,/{0};component/{1}";

        if (!UriParser.IsKnownScheme("pack")) new System.Windows.Application();

        var uri = new Uri(string.Format(uriFormat, assembly, resourcePath), UriKind.RelativeOrAbsolute);

        return BitmapFrame.Create(uri);
    }

    public static ImageSource ConvertFromGdiBitmap(Bitmap bitmap)
    {
        return Common.SystemAbstraction.Media.ImageConverter.ConvertToBitmapSource(bitmap);
    }

    public static Bitmap ConvertToGdiBitmap(ImageSource imageSource)
    {
        return Common.SystemAbstraction.Media.ImageConverter.ConvertToBitmap(imageSource as BitmapSource);
    }
}

Он создает ImageSource из Bitmap или ресурсаimages.

Использование:

img.Source = ImageSourceHelper("Path/To/Your/Image.png");

или

var resourceAssembly = // get resource assembly...
img.Source = ImageSourceHelper(resourceAssembly, "Path/To/Your/Image.png");

, если изображение содержится в другой сборке, отличной от текущей вызывающей сборки.

Путь к вашему изображению - это путь, начинающийся с корня файла проекта вашей сборки.Допустим, у вас есть папка с изображениями, ваш путь будет "images/somepicture.png".

0 голосов
/ 02 июня 2011

Я думаю, проблема в том, что вы привязываете не ту собственность.Попробуйте это:

<Image  Source="{Binding Path=Icon}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...