1

Windows Metro Apps(C#)では、ValueConverterを使用してImage-Uriを次のように渡します。

public class ProfileImage : IValueConverter {

    public Object Convert(Object value, Type targetType, Object parameter, String language) {

        if (value == null) {
            return "Common/images_profile/user.png";
        }

        return "ms-appdata:///local/" + (String)value;

    }

    public Object ConvertBack(Object value, Type targetType, Object parameter, String language) {
        return value;
    }

}

XAML:

<Image x:Name="profileImage" Height="80" Width="80" Source="{Binding Path, Converter={StaticResource ProfileImage}}"/>

画像はlocalFolderに非同期でダウンロードされています。

これをWindowsPhone8で使用したかったのですが、画像が表示されません。

var localFolder = ApplicationData.Current.LocalFolder;
StorageFile myFile = await localFolder.CreateFileAsync(
    UID + ".jpg",
    CreationCollisionOption.FailIfExists);

using (var s = await myFile.OpenStreamForWriteAsync()) {
    s.Write(imageBytes, 0, imageBytes.Length);
}

LocalStorageへのイメージの書き込みに使用されます。

にコンテンツがない場合はvalue、の画像がCommon/images_profile/user.png正しく表示されています。これはパッケージにあり、ローカルフォルダにはありません。

画像を表示するためにreturnパラメータとして使用する必要がある形式を知る必要があります。

4

2 に答える 2

1

URLスキームms-appdata:///はどこでも機能するとは限りません。

私はこのコンベッターを使用して、分離されたストレージからの画像をバインドしています。

public class PathToImageConverter : IValueConverter
{
    private static IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForApplication();

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string path = value as string;

        if (string.IsNullOrEmpty(path))
            return null;

        if ((path.Length > 9) && (path.ToLower().Substring(0, 9).Equals("isostore:")))
        {
            using (var sourceFile = isoStorage.OpenFile(path.Substring(9), FileMode.Open, FileAccess.Read))
            {
                BitmapImage image = new BitmapImage();
                image.SetSource(sourceFile);

                return image;
            }
        }
        else
        {
            BitmapImage image = new BitmapImage(new Uri(path));

            return image;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

バインドには、URLにisostore:プレフィックスを使用する必要があります。

于 2013-03-02T08:41:46.707 に答える
0

ここで何かが欠落している必要があります。「return"ms-appdata:/// local /" +(String)value;」を返す代わりにStorageFile.Pathを使用しないのはなぜですか。

その#WP8はとても別のものであることに気づきました。分離ストレージとSilverlightUriは引き続き使用できます

于 2013-03-01T16:04:11.963 に答える