前提・実現したいこと
FlipViewの勘所を教えてください。
発生している問題・エラーメッセージ
(1)いちどに200枚とかを登録するととても遅い
(2)メモリが不足して落ちる。
該当のソースコード
xaml
1<Page 2 x:Class="App1.MainPage" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:local="using:App1" 6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 mc:Ignorable="d" 9 Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Loaded="Page_Loaded"> 10 11 <Grid> 12 <FlipView x:Name="MainFlip" /> 13 </Grid> 14</Page> 15
C#
1using System; 2using System.IO; 3using Windows.UI.Xaml; 4using Windows.UI.Xaml.Controls; 5using Windows.UI.Xaml.Media.Imaging; 6 7namespace App1 8{ 9 public sealed partial class MainPage : Page 10 { 11 public MainPage() 12 { 13 this.InitializeComponent(); 14 } 15 16 private void Page_Loaded(object sender, RoutedEventArgs e) 17 { 18 var files = Directory.EnumerateFiles(@".\", "*.jpg"); 19 foreach (var file in files) 20 { 21 var bitmap = new BitmapImage(new Uri(file)); 22 Image image = new Image(); 23 image.Source = bitmap; 24 MainFlip.Items.Add(image); 25 } 26 } 27 } 28} 29
疑問点
MSDNを見たところ、そもそもFlipViewは15枚くらいを想定したコントロールらしいです。
とすると200枚とかを手軽に(たとえばフリップで)めくって表示するには、使えないものでしょうか?
(1)最初に10個くらい登録する。
(2)フリップでめくっていって、10枚めになったら、現在のを消して次の10枚を読む。
みたいなことをすれば、できなくはないのかなと思いました。
たとえばこんなコードです。
C#
1 List<string> Files; 2 int Counter = 0; 3 private void FirstStep() 4 { 5 Files.AddRange(Directory.GetFiles(@".\", "*.jpg")); 6 foreach (var file in Files) 7 { 8 var bitmap = new BitmapImage(new Uri(file)); 9 Image image = new Image(); 10 image.Source = bitmap; 11 MainFlip.Items.Add(image); 12 Counter++; 13 if (10 < Counter) break; 14 } 15 } 16 17 private void MainFlip_SelectionChanged(object sender, SelectionChangedEventArgs e) 18 { 19 if (9 < MainFlip.SelectedIndex) 20 { 21 for (int i = 0; i < 10; i++) 22 { 23 MainFlip.Items.RemoveAt(i); 24 } 25 for (int i = Counter; i < 10; i++) 26 { 27 var bitmap = new BitmapImage(new Uri(Files[i])); 28 Image image = new Image(); 29 image.Source = bitmap; 30 MainFlip.Items.Add(image); 31 Counter++; 32 if (10 < i) break; 33 } 34 } 35 } 36
でもこれは、まさかね、と思うようなひどいコードだと思いますし、もうちょっとよい方法がありそうな気がします。
FlipViewに多数のファイルを登録してストレスなくめくる方法、ご教示いただけないでしょうか。
ヒントでもよいです。
ひょっとして、FlipViewを使わず、ImageにManipulationDeltaとManipulationCompletedを実装するとかでしょうか?
XAML
1 <Image ManipulationDelta="Image_ManipulationDelta" ManipulationCompleted="Image_ManipulationCompleted"/> 2
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2019
Version 16.1.3
VisualStudio.16.Release/16.1.3+29009.5
Microsoft .NET Framework
Version 4.7.03190
インストールされているバージョン:Community
Target Framework .NET Framework 4.7.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/09 06:14
2019/07/10 00:18