2017-04-07 12 views
0

WPFでPDFプレビューアを作成し、ItemsControlのページをレンダリングされたページのObservableCollectionにバインドする必要があります(各ページはBitmapSourceインスタンスです)。 ItemsControlScrollViewerの内部にあります。今、私は一度にすべてのページをレンダリングしたくないのです。何百ものページがあり、本当に速くメモリを食べるからです。私は、アプリケーションウィンドウに表示されているものだけをレンダリングしたい。しかし同時に、ItemsControlをPDF文書の全ページ数と同じ大きさにして、ScrollViewerのスクロールバーが十分に小さく、どれだけスクロールするかを示したいと思います。不完全なコレクションからItemsControlを作成する

質問には、ItemsControlをすべてのページの数と同じ大きさにするにはどうすればいいですか?ObservableCollectionにはすべてのページがありますか?

私はまたGridItemsControlを交換するとみなされ、ページの高さにHeightセットといくつかのダミーの項目を追加し、それがユーザーに表示さだ時に実際のページでそれを置き換えるが、それは多くの作業のように思えます。

答えて

2

代わりに(あなたは一見有する)ObservableCollection<BitmapSource>を有することができ、例えば、PageINotifyPropertyChangedインタフェースを実装たBitmapSourceプロパティを持つクラスであるObservableCollection<Page>を有していなければなりません

public class Page : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private BitmapSource image; 

    public BitmapSource Image 
    { 
     get { return image; } 
     set 
     { 
      image = value; 
      PropertyChanged?.Invoke(this, 
       new PropertyChangedEventArgs(nameof(Image))); 
     } 
    } 
} 

今、あなたのドキュメントのページ数と同数のPageインスタンスを作成してのObservableCollectionにそれらを置くことができます。ページが実際にロードされた場合にのみ、あなたはItemTemplateには、このようにバインディングをトリガーすることになる、そのImageプロパティを割り当てます:

<ItemsSource.ItemTemplate> 
    <DataTemplate> 
     <Image Source="{Binding Image}"/> 
    <DataTemplate> 
</ItemsSource.ItemTemplate> 
+0

は、私が確認するために、Pageクラスの幅と高さを作成することができますItemsControlには、十分な画面を留保します各ページのスペース(ScrollViewerのスクロールバーが適切なサイズになるように) – Val

+0

Imageコントロールの固定サイズを設定している可能性があります。それ以外の場合は、もちろん、幅と高さをページクラスの適切なプロパティにバインドすることができます。 – Clemens

+0

何かのように ''? – Val

関連する問題