Добавочная загрузка в FlipView Windows Phone 8.1

Я создаю одно приложение, такое как Gallary, в Windows Phone 8.1. я реализовал флип-просмотр для отображения изображений, теперь я хочу показывать изображение при постепенной загрузке, а также пользователь может масштабировать конкретное изображение с помощью масштабирования. я реализовал некоторые коды, но не так, как надо, я не могу правильно масштабировать изображение, а также я не могу изменить изображение, когда изменение изображения на экране через скользящее приложение дает сбой. пожалуйста, помогите мне, как сделать мою функциональность. Мой Xaml-код выглядит так:

 <Grid Grid.Row="1" Margin="0,0,0,0" x:Name="rootGrid" Loaded="rootGrid_Loaded" >
        <FlipView x:Name="flipview" SelectionChanged="FlipViewSelectionChanged" Loaded="flipViewLoaded" >
            <FlipView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                         <ScrollViewer x:Name="scrollViewer" MinZoomFactor="1" ZoomMode="Enabled" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" >   
                        <Image Source="{Binding Image}" Stretch="Uniform"  HorizontalAlignment="Center" Height="{Binding Mode=TwoWay, ElementName=flipview, Path=Height}" Width="{Binding Mode=TwoWay, ElementName=flipview, Path=Width}" />
                        </ScrollViewer> 
                    </Grid>
                </DataTemplate>
            </FlipView.ItemTemplate>
        </FlipView>
  </Grid>

и С# вот так:

    int offset = 0;
    bool incall = false, endoflist = false;

 private void rootGrid_Loaded(object sender, RoutedEventArgs e)
    {
        flipview.ItemsSource = sourceList;
        fetchPhotos(0);
    }

 private void flipViewLoaded(object sender, RoutedEventArgs e)
    {
        ScrollViewer viewer = GetScrollViewer(flipview);
        viewer.ViewChanged += mainView_ViewChanged;
    }
    public static ScrollViewer GetScrollViewer(DependencyObject depObj)
    {
        if (depObj is ScrollViewer) return depObj as ScrollViewer;

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);

            var result = GetScrollViewer(child);
            if (result != null) return result;
        }
        return null;
    }

    private void mainView_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
    {
        ScrollViewer view = (ScrollViewer)sender;
        double progress = view.VerticalOffset / view.ScrollableHeight;
        System.Diagnostics.Debug.WriteLine(progress);
        if (progress > 0.7 & !incall && !endoflist)
        {
            incall = true;
          fetchPhotos(++offset);
        }
    }


private async void fetchPhotos(int offset)
    {
        int start = offset * 8;
        StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        StorageFolder photosFolder = await localFolder.GetFolderAsync("Photos");
        StorageFolder Folder = await photosFolder.GetFolderAsync(folderName);
        var allphotos = await Folder.GetFilesAsync();
        for (int i = start; i < start + 8; i++)
        {
            if (i < allphotos.Count)
            {

                foreach (photos.PhotosClass abc in PassedData.passedSourceList)
                {
                    string filename = abc.Name;
                    StorageFile file = await Folder.GetFileAsync(filename);
                    BitmapImage image = new BitmapImage();
                    var randomAccessStream = await file.OpenReadAsync();
                    image.SetSource(randomAccessStream);
                    sourceList.Add(new photos.PhotosClass { Name = filename, Image = image });
                }
            }
            else
            {
                endoflist = true;
                break;
            }
        }
        incall = false;
    }

 private void FlipViewSelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        if (sender is FlipView)
        {
            FlipView item = (FlipView)sender;
            var flipViewItem = ((FlipView)sender).ItemContainerGenerator.ContainerFromIndex(((FlipView)sender).SelectedIndex);
            var scrollViewItem = FindFirstElementInVisualTree<ScrollViewer>(flipViewItem);
            if (scrollViewItem is ScrollViewer)
            {
                ScrollViewer scroll = (ScrollViewer)scrollViewItem;
                scroll.ScrollToHorizontalOffset(0);
                scroll.ScrollToVerticalOffset(0);
                scroll.ZoomToFactor(1.0f);
            }
        }
    }
    private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
    {
        if (parentElement != null)
        {
            var count = VisualTreeHelper.GetChildrenCount(parentElement);
            if (count == 0)
                return null;

            for (int i = 0; i < count; i++)
            {
                var child = VisualTreeHelper.GetChild(parentElement, i);

                if (child != null && child is T)
                    return (T)child;
                else
                {
                    var result = FindFirstElementInVisualTree<T>(child);
                    if (result != null)
                    {
                        return result;
                    }
                }
            }
        }
        return null;
    }

person sohan vanani    schedule 17.12.2015    source источник
comment
для добавочной загрузки вы можете использовать ISupportIncrementalLoading с вашими данными вот как. marcominerva.wordpress .com/2013/05/22/   -  person Muhammad Saifullah    schedule 18.12.2015
comment
Возможный дубликат Инкрементная загрузка и визуальное состояние привязки   -  person Paul Sweatte    schedule 21.01.2017