在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。
我想在Windows Phone 8上使用它 - 但它不会显示任何图像。
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
中的图片正在正确显示。这个是在包中,而不是在本地文件夹中。
我需要知道我必须使用哪种格式作为返回参数才能显示图像。
答案 0 :(得分:1)
我认为网址方案 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();
}
}
对于绑定,您必须在网址中使用 isostore:前缀。
答案 1 :(得分:0)
这里一定要遗漏一些东西..为什么不使用StorageFile.Path而不是返回&#34;返回&#34; ms-appdata:/// local /&#34; +(字符串)值;&#34;
意识到它的#WP8是另一回事。您仍然可以使用独立存储和Silverlight Uri