2017-11-27 10 views
1

以下のxamlの一部。アプリケーションのスロー/エラーは発生しません。また、アプリは正確なスライド数を生成します。灰色の空の領域を取得するだけです。それはスライドする。領域は空です。まずLocalFolderイメージをフリップビューで表示する方法(ユニバーサルWindows開発)

public sealed partial class PresentationPage : Page 
{ 

    public ObservableCollection<Uri> PicFiles; 
    public PresentationPage() 
    { 
     this.InitializeComponent(); 
     PicFiles = new ObservableCollection<Uri>(); 
     GetPicFilesFromStorePath(); 
    } 

    private void GetPicFilesFromStorePath() 
    { 
     var path = Windows.Storage.ApplicationData.Current.LocalFolder.Path; 

     var a = Directory.GetFiles(path, "*.*").Where(x => x.EndsWith(".jpg")); 

     foreach (var x in a) 
     { 
      PicFiles.Add(new Uri(x,UriKind.Absolute)); 
     } 
     flipView1.ItemsSource = PicFiles; 
    } 

答えて

1

<FlipView x:Name="flipView1""> 
     <FlipView.ItemTemplate> 
      <DataTemplate> 
       <Image> 
        <Image.Source> 
         <BitmapImage UriSource="{Binding PicFiles}" /> 
       </Image.Source> 
       </Image> 
      </DataTemplate> 
     </FlipView.ItemTemplate> 
    </FlipView> 

と分離コード、上記のコードは推奨されない、アクセスするためにファイルの完全なファイル・システム・パスのプロパティを取得します。相対APIのStoragFileを使用できます。詳細はSkip the path: stick to the StorageFileを参照してください。 QueryOptionsは、状況に応じたフィルタリングに使用できます。

第2に、UriSourceプロパティへのフルファイルシステムパス値を指定しても機能しません。アプリデータに格納されているファイルにアクセスするには、スキームでUriを使用する必要があります。参照できる詳細はHow to load file resources (XAML)です。

最後に、バインディングが正しい方法ではなく、コレクション全体をUriSourceプロパティにバインドしていますが、実際にはコレクションの値はUriです。

だから更新され、完全なコードスニペットは、次のように背後

<FlipView x:Name="flipView1" > 
    <FlipView.ItemTemplate> 
     <DataTemplate> 
      <Image > 
       <Image.Source> 
        <BitmapImage UriSource="{Binding}" /> 
       </Image.Source> 
      </Image> 
     </DataTemplate> 
    </FlipView.ItemTemplate> 
</FlipView> 

コード:

private async void GetPicFilesFromStorePath() 
{ 
    //var path = Windows.Storage.ApplicationData.Current.LocalFolder.Path; 

    //var a = Directory.GetFiles(Name, "*.*").Where(x => x.EndsWith(".jpg")); 

    //foreach (var x in a) 
    //{ 
    // PicFiles.Add(new Uri((String.Format("ms-appdata:///local/{0}", x)))); 
    //} 

    StorageFolder localfolder = Windows.Storage.ApplicationData.Current.LocalFolder; 
    List<string> fileTypeFilter = new List<string>(); 
    fileTypeFilter.Add(".jpg"); 
    QueryOptions queryOptions = new QueryOptions(Windows.Storage.Search.CommonFileQuery.OrderByName, fileTypeFilter); 
    StorageFileQueryResult queryResult = localfolder.CreateFileQueryWithOptions(queryOptions); 
    var files = await queryResult.GetFilesAsync(); 
    foreach (StorageFile x in files) 
    { 
     PicFiles.Add(new Uri((String.Format("ms-appdata:///local/{0}", x.Name)))); 
    } 
    flipView1.ItemsSource = PicFiles; 
} 
+0

問題は、「ms-appdata:/// local /」接頭辞を使用して8時間後に解決済みです。今私の質問に答えるためにここに戻る。一日後に鋸が正解に答えました。 –

0

同様のソリューションを。 {バインディング}

namespace Project1.Models 
{ 
    public class PicFile 
    { 
     public Uri Img { get; set; } 
    } 

    public static class PicFileManager 
    { 
     private static readonly ObservableCollection<PicFile> PicFiles = new ObservableCollection<PicFile>(); 
     public static ObservableCollection<PicFile> GetPicFilesFromStorePath() 
     { 

      string path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Portaokul"); 

      var a = Directory.GetFiles(path, "*.*").Where(x => x.EndsWith(".jpg")); 

      PicFiles.Clear(); 
      foreach (var x in a) 
      { 
       Uri uri_ = new Uri(
        Path.Combine("ms-appdata:///local/Project1", Path.GetFileName(x))); 

       PicFiles.Add(new PicFile { Img= uri_ }); 
      } 
      return PicFiles; 
     } 
    } 
} 
ページで

public PresentationPage() 
    { 
     this.InitializeComponent(); 
     flipView1.ItemsSource = PicFileManager.GetPicFilesFromStorePath(); 

}

XAMLで

<FlipView x:Name="flipView1"> 
     <FlipView.ItemTemplate> 
      <DataTemplate x:DataType="models:PicFile"> 
       <Image> 
        <Image.Source> 
         <BitmapImage UriSource="{x:Bind Img}"/> 
        </Image.Source> 
       </Image> 
      </DataTemplate> 
     </FlipView.ItemTemplate> 
    </FlipView> 

とXAMLの上よりも速い

:どこか私は、{結合Xは}読み取ります
xmlns:models="using:Project1.Models" 
関連する問題