2017-04-24 16 views
0

キャンバスに画像を表示しています。絶対パスを使用すると、すべてが完全に機能します。しかし、私が相対パスを使用しようとすると、コードは実行されますが、イメージはロードされません。 gitを使ってグループプロジェクトに取り組んでいるので、相対パスを使用する必要があります。私の画像が入っているフォルダは、プロジェクトフォルダの中にあります。私の絶対パスは動作しますが、私の相対パスはなぜですか?

private void ShuffleCardsClick(object sender, RoutedEventArgs e) 
    { 
     computerDeck.ShuffleDeck(); 
     playerDeck.ShuffleDeck();    
     dealButton.IsEnabled = true; 

     BitmapImage bi = new BitmapImage(); 
     bi.BeginInit();    
     bi.UriSource = new Uri(@"card_images\cardback.png", UriKind.RelativeOrAbsolute); 

     bi.UriSource = new Uri(@"C:\Users\Windows\Documents\GitHub\NetEssentials_H1\ 
     Kaartspelen\KoetjeMelken\card_images\cardback.png"); 
     bi.EndInit(); 

     Image card = new Image(); 
     card.Source = bi; 
     card.Margin = new Thickness(0, 0, 0, 0); 
     card.Width = computerDeckCanvas.Width; 
     card.Height = computerDeckCanvas.Height; 
     computerDeckCanvas.Children.Add(card); 

    } 
+0

あなたのプログラムは 'KoetjeMelken'で実行可能ですか? – NullDev

+0

これは正しいです – wetallday

答えて

0

あなたはMVCプロジェクトで作業している場合、あなたはあなたのための相対パスを作成しますServer.MapPath("your/path")を使用することができます。

さらに詳しい情報:.NETクライアントアプリケーションで

var appDomain = System.AppDomain.CurrentDomain; 
var basePath = appDomain.RelativeSearchPath ?? appDomain.BaseDirectory; 
var path = Path.Combine(basePath, "EmailTemplates"); 
+0

私はすでに使用しようとしているのと同じパスを単に生成しませんか? – wetallday

+0

しかし、それはあなたの作業ディレクトリに相対的なパスを生成します。私が知っている限り、これはMVCプロジェクトでのみ動作することに注意してください。 –

+0

更新された回答を確認してください。 –

2

相対パスは、常にあなたの作業ディレクトリからの相対である:私は御馳走を働いた前に、次を使用していたクラスライブラリのもMSDN

。デフォルトでは、Visual Studio内からアプリケーションを実行する場合、作業ディレクトリはbin \ Debug(またはリリースモードで実行している場合はbin \ Release)です。

したがって、Visual Studioでファイルをターゲットフォルダにコピーするように指定するのが最も簡単な方法です。しかし、ユーザーが別の作業ディレクトリでプログラムを実行したい場合には、それはあなたの問題を解決しません。このシナリオでクラッシュするのを避けたい場合は、イメージファイルの絶対パスを計算する必要があります。たとえば、実行中のアセンブリの絶対パスを基にします。

また、画像としてリソースを含めることもできます。

+0

私はそれらをリソースとして追加することが行く方法だと思います。私のコードは私が持っている方法で動作していないことは本当に奇妙だと思う。 – wetallday

関連する問題