2017-11-27 16 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은 귀하의 상황에서 걸러 낼 수 있습니다.

둘째, 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

문제는 이미 8 시간 후에 "ms-appdata : /// local /"접두어를 사용하여 해결됩니다. 나는 나의 질문에 지금 대답하기 위해 여기에 돌아온다. 그리고 톱은 하루 후에 정답에 답했다. –

0

유사한 솔루션을. 어딘가에 나는 {X : 바인딩} 읽기보다 빠른을 페이지

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

}에서

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

{바인딩}

<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

위에 XAML에서

xmlns:models="using:Project1.Models"