2017-11-27 2 views
1

Ein Teil von Xaml unten. App löst/löst keinen Fehler aus. App generiert auch genaue Anzahl der Folien. aber nur graue leere Bereiche bekommen. es gleitet; aber Bereiche sind leer.So zeigen Sie LocalFolder-Bilder in einem Flipview an (Universal Windows Development)

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

und Code-Behind

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; 
    } 

Antwort

1

Erstens der obige Code erhalten Sie die vollständige Dateisystempfad Eigenschaft der Datei für den Zugriff, die nicht empfohlen wird. Sie könnten StoragFile relative APIs verwenden. Details bitte Referenz Skip the path: stick to the StorageFile. QueryOptions kann zum Filtern in Ihrer Situation verwendet werden.

Zweitens geben vollen Dateisystem-Pfad Wert an die UriSource Eigenschaft wird nicht funktionieren. Um auf Dateien zuzugreifen, die in den App-Daten gespeichert sind, sollten Sie Uri mit dem Schema ms-appdata: verwenden. Details, die Sie beziehen können How to load file resources (XAML).

Schließlich ist die Bindung nicht in der richtigen Weise, Sie binden die gesamte Sammlung an die UriSource Eigenschaft, tatsächlich benötigt es einen Uri Wert der Sammlung.

So ist die neueste Fassung der gesamten Code-Schnipsel wie folgt:

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

-Code hinter:

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

Problem wurde bereits gelöst, indem das Präfix "ms-appdata: /// local /" nach dem Verlust von 8 Stunden verwendet wurde. Ich komme zurück, um meine Frage jetzt zu beantworten. und sah nach einem Tag die richtige Antwort. –

0

ähnliche Lösung. Irgendwo habe ich gelesen {x: Bindung} ist schneller als {Binding}

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; 
     } 
    } 
} 

in Seite

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

}

in 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> 

und oben auf XAML

Verwandte Themen