2009-09-02 17 views
1

これは簡単な質問ですが、わかりませんがどこでも答えを見つけることはできません。私は、C#を使用してWPFでランタイム中にイメージソースを変更しようとしています。コードが実行されるたびに、2.gifを表示するのではなく、1.gifを削除して白い空白のボックスが表示されます。前もって感謝します。wpfイメージソースを変更

XAML:

<Image x:Name="img" Height="150" Margin="142,20,138,0" VerticalAlignment="Top"> 
     <Image.Source> 
      <BitmapImage UriSource="C:\Users\John\1.gif" /> 
     </Image.Source> 
</Image> 

C#:最初

string sUri = @"C:\Users\John\2.gif"; 
Uri src = new Uri(sUri, UriKind.RelativeOrAbsolute); 
BitmapImage bmp = new BitmapImage(src); 
img.Source = bmp; 
+0

'Height'が設定されていますが、新しい' Image'に合うように 'Width'ストレッチができますか? – Yogesh

答えて

1

BitmapImageを初期化する必要があります。あなたのイメージを取得する必要があります

BitmapImage bmp = new BitmapImage(src); 
bmp.BeginInit(); 
bmp.EndInit(); 

: 正しいコードは次のようなものになるだろう。

+0

このコードは、InvalidOperationExceptionを生成します。「初期化状態を複数回設定できません。私のために。 Begin/EndInitはデフォルトのコンストラクタを使用し、後でUriSourceプロパティを設定する場合にのみ必要ですか? – simonc

+0

あなたのコメントから、あなたのコードはBeginInit()を2回呼び出しているように見えますが、2度目に呼び出すとその例外が発生します。 –

+0

BeginInit()が2回呼び出されることに同意しました。私はあなたのコードスニペットが間違っていると思う - BeginInit()とEndInit()への呼び出しは、UriをとるBitmapImage ctorを使用するときは不要です。 – simonc

0

明白な質問:あなたは2.gifが実際に存在する画像その確信している、とあなたが設定したときのBitmapImageがnullでないことそれはimgのソースとしてですか?

関連する問題