Načtení obrázku z jiné knihovny ve WPF


Jak jednoduše načíst obrázek, ikonu nebo popř. i další typy souborů z jiné knihovny?

Ukážu na příkladu: Mám WPF aplikaci “Test”, ke které jsem přidal Class Library “Data”, takže Solution obsahuje 2 projekty (viz níže). V knihovně data mám vytvořený adresář Images, ve kterém je umístěn obrázek no_image.png. Tomu je nutné nastavit vlastnost Build Action na hodnotu Resource.

Ukázka ve Visaul Studiu

Pak už stačí použít následující kód:

Pomocí XAMLu:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Test" Height="200" Width="200">
  <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <Image Source="/Data;component/Images/no_image.png" Stretch="None" />
    <Label Content="Bez obrázku" HorizontalAlignment="Center" />
  </StackPanel>
</Window>

Nebo pomocí kódu v C#:

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace Test
{
  public partial class MainWindow
  {
    public MainWindow()
    {
      InitializeComponent();

      // načtení obrázku
      BitmapImage bitmapImage = new BitmapImage();
      bitmapImage.BeginInit();
      bitmapImage.UriSource = new Uri("/Data;component/Images/no_image.png",
                                      UriKind.RelativeOrAbsolute);
      bitmapImage.EndInit();

      StackPanel panel = new StackPanel
                           {
                             HorizontalAlignment = HorizontalAlignment.Center,
                             VerticalAlignment = VerticalAlignment.Center
                           };
      panel.Children.Add(new Image
                           {
                             Source = bitmapImage,
                             Stretch = Stretch.None
                           });
      panel.Children.Add(new Label
                           {
                             Content = "Bez obrázku",
                             HorizontalAlignment = HorizontalAlignment.Center
                           });
      Content = panel;
    }
  }
}

Pro úplnost přidávám, jak výsledek vypadá u mě:

Ukázka

, , ,

Komentáře jsou uzavřeny.