24 setembro 2009

WPF - Carregar imagem no XAML e programaticamente

Ora bem, nos próximos tempos vou colocar por aqui resoluções de questões com código para uma aplicação que está a ser desenvolvida em WPF/C#. Umas coisas simples, a maioria com a ajuda preciosa do Google...

Para abrir, uma muito chata: colocar uma imagem!

A maneira normal, em modo visual, é colocando um controlo de imagem, e depois na propriedade "source", escolher a imagem pretendida.

No entanto, temos pouco controlo sobre o que está a ser feito. Sendo assim, era necessário conseguir ser eu a especificar por código a imagem a ser apresentada, em vez de usar a tab das propriedades.

Aplicação com o nome "WpfApplication1", contém uma pasta para as imagens com o nome "Imgs".

A solução que encontrei foi:

XAML:

< image source="/WpfApplication1;component/Imgs/file.png" />

ou

< image.source>
< bitmapimage urisource="/Imgs/file.png" />
< /image.source>


No caso de querer colocar este carregamento a ser feito programaticamente (no C# em vez do XAML). No XAML, coloquei um objecto imagem com x:Name="image2":

Versão com o caminho completo, não interessa muito.
Uri src = new Uri(@"T:/Documents/Visual Studio 2008/Projects/WpfApplication1/Imgs/file.png");
BitmapImage img = new BitmapImage(src);
image2.Source = img;

Caminho absolute.
BitmapImage bmi = new BitmapImage(new Uri("pack://application:,,,/Imgs/file.png", UriKind.Absolute));
image2.Source = bmi;

Caminho relative.
BitmapImage bmi = new BitmapImage(new Uri("/Imgs/icons/file.png", UriKind.Relative));
image2.Source = bmi;

As imagens necessitam de ter o seu "Build Action" como "Resource".

Sem comentários: