私の '本当の' URLは、LocalStateフォルダの下のダウンロードディレクトリにコピーされるファイルを指しています。ウリは次のとおりです。ファイル:///ダウンロード/ ENI^mp270a ^タブレットテスト/ DSC_5517.jpg
私たちが知っているように、我々のアプリのローカルフォルダがLocalState
フォルダを命名され、我々はアプリのコードでは、このフォルダにアクセスすることができます後ろに。しかしUriはここでは正しくありません。問題は実際には "ローカルフォルダ内のファイルのパスを取得する方法"です。
StorageFile.Path | path propertyを使用すると、ファイルの完全なファイルシステムパスを取得できます。たとえばここでは、ファイルのUriから変換されたBitmapImage
をすべて表示するためにListView
を使用しました。 URLはImage
のソースとして直接使用できるので奇妙ですが、ここでは必要に応じてURLをBitmapImage
に変換するコンバータを使用します。
<Page.Resources>
<local:UriToBitmapImageConverter x:Key="cvt" />
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button Content="Get Picture" Click="Button_Click" />
<ListView Grid.Row="1" ItemsSource="{x:Bind urlcollection}">
<ListView.ItemTemplate>
<DataTemplate>
<Image Source="{Binding url, Converter={StaticResource cvt}}" Width="300" Height="300" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
背後にあるコード:
private ObservableCollection<ImageUri> urlcollection = new ObservableCollection<ImageUri>();
public MainPage()
{
this.InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
StorageFolder local = ApplicationData.Current.LocalFolder;
StorageFolder downloads = await local.GetFolderAsync("downloads");
if (downloads != null)
{
var files = await downloads.GetFilesAsync();
foreach (var file in files)
{
urlcollection.Add(new ImageUri { url = new Uri(file.Path) });
}
}
}
Converterは、このようなものです:
public class UriToBitmapImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var url = (Uri)value;
return new BitmapImage(url);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
そしてImageUri
クラスは単純です:
public class ImageUri
{
public Uri url { get; set; }
}