2012-03-02 11 views
1

WPFアプリケーションでは、ScrollViewerがあります。その中にItemsControlがあり、そのアイテムはコレクションにデータバインドされています。アイテムに指定されたテンプレートがあります。私はScrollViewerに論理スクロールを使用させたいので、ScrollViewer.CanContentScroll = "True"フラグをセットし、ItemsPanelのTemplatePackelをStackPanelに設定します。itemscontrolを使用したScrollviewer論理スクロール

ただし、スクロールはまだ論理的ではなく物理的です。私は間違って何をしていますか?返事が遅れて申し訳ありません

おかげ トム

+0

「物理的ではなく、論理的」とはUI仮想化を参照するのに「論理」を使用しますか?あなたがこの質問に興味があれば、[ItemsControlの仮想化](http://stackoverflow.com/q/2783845/302677) – Rachel

答えて

0

... これは(スクロールピクセルベース)、Microsoftが4.5を.NETに "追加" ものです。

WPF 4では、TreeViewには論理的なスクロールがありますが、ListBoxとItemsControlではありません。 それはどのようにTreeViewで動作し、ListBoxでは動作しませんか?これは、スクロールがVirtualizingStackPanelによって管理されているので、質問する必要のある質問です。

「秘密」は、IsPixelBasedという名前のVirtualizingStackPanelの内部プロパティにあります。

これをtrueに設定すると、論理的なスクロールが戻されます。

しかし、これにはコストがかかります。大きなアイテムソース(仮想化とコンテナリサイクルを使用していても)はスクロールが鈍いようです。 (大きなアイテムのソースは50,000または100,000と同じですが)物理的な(アイテムベースの)スクロールではそうではありません。

私はデフォルトでピクセルベースのスクロールで仮想化pabelを持っていることの一例である。この問題は、ここでWPF 4.5で

を解決していることを願って:あなたは、

public class VSP : VirtualizingStackPanel 
{ 
    public VSP() 
    { 
     typeof(VSP).GetProperty("IsPixelBased", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, true, null); 
    } 
} 
関連する問題