3

WPFアプリケーションで使用できる仮想化WrapPanelが機能している人はいますか?

http://virtualwrappanel.codeplex.com/で実装をダウンロードして試しました。ただし、次の例外が発生します。

「要素'MyNamespace.VirtualizingWrapPanel'のレイアウト測定オーバ​​ーライドは、Infinityが使用可能なサイズとして渡された場合でも、DesiredSizeとしてPositiveInfinityを返さないようにする必要があります。」

これは、ラップパネルをリストボックスに適用しようとするときです

4

2 に答える 2

7

これはおそらく、自分で修正できる可能性のあるバグです。メソッドを探しMeasureOverrideます。availableSizeメソッドに渡されたものを常に返すようです。availableSize例外として、が含まれている場合は戻らないでくださいdouble.PositiveInfinity。だからこれを試してみてください:

if(availableSize.Width == double.PositiveInfinity || availableSize.Height == double.PositiveInfinity)
{
    return Size.Empty;
}

// all the measureoverride code comes here

return availableSize;

実装については詳しく見ていない。MeasureOverrideしかし、誰が知っているか、パネルがとの間の状態を保存しない場合は、これを回避できる可能性がありますArrangeOverride(適切に実装されている場合は保存しないでください)。

于 2010-09-20T05:08:35.440 に答える
6

この問題は、スタックパネルやスクロールビューアなどの別のコントロール内にリストボックスがあり、リストボックスを好きなサイズに拡大できるために発生している可能性があります。この場合、仮想ラップパネルでエラーが発生することはありませんが、パフォーマンスの問題は説明されています。

この場合、仮想化が無効になっているため、Microsoft独自の仮想化パネルの1つを使用しても、パフォーマンスの問題は修正されません。リストボックスは好きなサイズに拡大できるので、画面に表示されていなくてもすべてのアイテムを描画します。したがって、仮想化は適用されません。

リストボックスがこれらの種類のコンテナのいずれかに含まれていないことを確認すると、仮想化が機能し始め、パフォーマンスが大幅に向上することがわかります。

于 2011-04-22T09:50:57.087 に答える