如何使用PCLStorage将图像文件从iOS或Android加载到使用ImageSource的图像控件。
public string GetMediaFilePath(int orgId, string folderName, string filename)
{
var storage_root = FileSystem.Current.LocalStorage.Path;
var rootFolderName = string.Format(ROOT_PREFIX, orgId);
var path = string.Format("{0}/{1}/{2}", storage_root, rootFolderName, filename);
return path; }
<controls:CircleImage
Grid.Row="0"
Grid.Column="0"
Style="{StaticResource profileImageStyle}"
Source="{Binding Source}"
VerticalOptions="Center"
HorizontalOptions="Center">
</controls:CircleImage>
public ImageSource Source
{
get
{
var file = new MediaLogic().GetMediaFilePath(Model.OrgId, MediaLogic.PROFILE_IMAGE_FOLDER, Model.ProfileImage);
return "file:///"+file;
}
}
我尝试删除file:///并使用ImageSource.FromFile或FromUri,但它们都没有显示图像。
答案 0 :(得分:0)
PCLStorage有IFile.OpenAsync(),它将返回一个流。
Stream stream = await file.OpenAsync(FileAccess.Read);
image.Source = ImageSource.FromStream(() => stream);
答案 1 :(得分:0)
如果您想使用bind加载图片源,则应使用转换器。
首先创建一个转换器,如:
public class ImageFileToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var path = (string)value;
return ImageSource.FromFile(path);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后你可以在你的XAML中使用它:
<controls:CircleImage
Grid.Row="0"
Grid.Column="0"
Style="{StaticResource profileImageStyle}"
Source="{Binding Source, Converter={StaticResource ImageFileToImageSourceConverter}}"
VerticalOptions="Center"
HorizontalOptions="Center">
</controls:CircleImage>
此处还有dataSource类:
public class FileSource
{
public string Source
{
get
{
var file = new MediaLogic().GetMediaFilePath(Model.OrgId, MediaLogic.PROFILE_IMAGE_FOLDER, Model.ProfileImage);
return file;
}
}
}
最后不要忘记将BindingContext
设置为此课程:MyStackLayout.BindingContext = new FileSource();