2

これは私のWindows8アプリ用です:

私のオブジェクトには、使用したい画像のパスを含む文字列プロパティがあります。

public String ImagePath

XAMLで、次のバインディングを使用してImageタグを設定しました。

<Image Source="{Binding ImagePath}" Margin="50"/>

プロジェクト(アセットフォルダー内)に含めた画像を参照すると、画像が正しく表示されます。パスは次のとおりです。Assets/car2.png

ただし、ユーザーが(FilePickerを使用して)選択した画像を参照すると、エラーが発生します(画像が表示されません)。パスは次のとおりです。C:\Users\Jeff\Pictures\myImage.PNG

Converterは、タイプ'Windows.Foundation.String'の値をタイプ'ImageSource'に変換できませんでした

もう少し情報を追加するだけです。ファイルピッカーを使用すると、ファイルの場所がURIに変換されます。

        Uri uriAddress =  new Uri(file.Path.ToString());
        _VM.vehicleSingle.ImagePath = uriAddress.LocalPath;

アップデート:

このイメージパスも分離ストレージに保存しています。ここが問題だと思います。選択したファイルのパスを保存することはできますが、分離ストレージをリロードするときにバインドしようとすると、機能しません。

したがって、アプリケーションディレクトリの外で画像を使用できない場合。その画像を保存してディレクトリに追加する方法はありますか?

モデルにBitmapImageプロパティを作成しようとしましたが、BitmapImageをシリアル化できないというエラーが表示されます。

4

4 に答える 4

7

コンバーターを使用する必要があります

public class ImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            MemoryStream memStream = new MemoryStream((byte[])value,false);
            BitmapImage empImage = new BitmapImage();
            empImage.SetSource(memStream);
            return empImage;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
于 2013-02-04T05:45:32.160 に答える
1

I recently did some work on binding to an ImageSource.

public System.Windows.Media.ImageSource PhotoImageSource
{
    get
    {
         if (Photo != null)
         {
              System.Windows.Media.Imaging.BitmapImage image = new System.Windows.Media.Imaging.BitmapImage();
              image.BeginInit();                    
              image.StreamSource = new MemoryStream(Photo);
              image.EndInit();

              return image as System.Windows.Media.ImageSource;
          }
          else
          {
               return null;
          }
     }
}

My "Photo" was an image stored in a byte[]. You could either convert your image to a byte[] or maybe try using a FileStream instead (I haven't tested with a FileStream so I can't say if it will work).

于 2013-02-01T20:09:41.930 に答える
1

appディレクトリの外部を指すファイルパスは使用できません。ファイルピッカーから取得したStorageFileストリームを読み込み、そのストリームを画像ソースに割り当てる必要があります。そのため、モデルを変更しない限り、代わりにimagesourceプロパティを使用するようにバインドするのは非常に困難です。

于 2013-01-27T17:15:10.157 に答える
1

前述のように、ファイルピッカーを介してアクセスを許可した場合でも、バインディングを使用してファイルシステムに直接アクセスすることはできません。使用できる手法については、 DevCenterXAMLイメージサンプルをご覧ください。

簡単に言うと、SetSourceAsyncを使用てファイルをBitmapImageに取り込み、それをバインディングソースとして使用できます。

于 2013-01-27T18:33:30.053 に答える