WPF Imageにローカルファイルを指定したいだけなんです

VisualStudio

本ページは広告が含まれています

XAMLでImage指定

WPF Imageにアプリケーションと同じ階層にあるjpgファイルを表示したいのですが、なかなかうまくいきません。

Image Class (Windows.UI.Xaml.Controls) - Windows UWP applications
Represents a control that displays an image. The image source is specified by referring to an image file, using several supported formats. The image source can ...

基になる型変換に依存します。XAML パーサーは、解析している XAML ページのベース URI を使用して、相対 URI を表すすべての文字列を解釈します。たとえば、XAML で値 “Images/myimage.png” を指定した場合、その文字列は、XAML ページ自体が存在するアプリケーション パッケージ内のベース URI の場所に追加される相対パスのサフィックスとして解釈されます。

と書いてあるので、そのままアプリケーションと同じフォルダにjpgファイルを入れてしてすれば表示されそうなのですが、

<Image x:Name="image" Source="oshirase.jpg"  HorizontalAlignment="Left" Height="435" Margin="100,10,0,0" VerticalAlignment="Top" Width="773"/>

これ表示されないんです。

プロジェクトフォルダと同じ階層

実行環境でDebugビルド

プロジェクトファイル(.csprojがあるフォルダ)と同じフォルダにoshirase.jpgを配置したら表示されるようになりました。

ところがですよ、今度はビルドした実行ファイルを直接実行するとoshirase.jpgは表示されないんです。

試しにプログラム実行フォルダと同じフォルダに入れてみましたけどやっぱり表示されません。

コードビハインドで実現

結局実力がない私はC#コードでゴニョゴニョやる事に

I_Oshirase.Source = new BitmapImage(new Uri(System.AppDomain.CurrentDomain.BaseDirectory + "oshirase.png"));

これで実現できました。

実行ファイルがあるディレクトリを取得

System.AppDomain.CurrentDomain.BaseDirectory

同じフォルダに

oshirase.png

を配置して表示できました。

はまりポイント

このようにしたら

I_Oshirase.Source = new BitmapImage(new Uri(System.AppDomain.CurrentDomain.BaseDirectory + "oshirase.ini", UriKind.Relative));

また、表示できなくなります。

UriKind.Relative これは相対Uri

ちゃんとオプション調べましょ。

UriKind 列挙型 (System)
さまざまな種類の URI を定義します。

絶対Uriなら表示

I_Oshirase.Source = new BitmapImage(new Uri(System.AppDomain.CurrentDomain.BaseDirectory + "oshirase.ini",UriKind.Absolute));

じゃ、相対でそのまま表示できんじゃない?

相対Uriで試験

めぐりめぐってこのように書いてみたけどやっぱりだめ

I_Oshirase.Source = new BitmapImage(new Uri("oshirase.ini", UriKind.Relative));

VisualStudioからデバッグビルドだからだめなのかなと疑い、実行ファイルを直接たたいてみたけどダメでした。

XAMLだけでできんものか?

XAMLだけで、カレントディレクトリにあるjpegファイルを表示できそうなものですよね?何か方法があるはずですが探しきれませんでした。一応、コードビハインドでやりたいことは実現できたので、今回はここまで。

タイトルとURLをコピーしました