0

値を取得するには、ListBox コントロールの VirtualizingStackPanel を反復処理する必要がありListBoxItem.RenderSizeます。VB.NET コードの C# では、どのように行うことができますか?

バックグラウンド:

私は、明らかにその Measure() アルゴリズムに関連するバグ (または「機能」) がある WPF のサード パーティ コントロール ライブラリを使用しています。代わりに、非常に非標準的な依存関係プロパティを添付して、フレームの 1 つをサイズ設定します。

これを回避するために、Measure をオーバーライドし、独自の値を添付プロパティに提供していますが、値はビジュアル ツリー内の値を介在させることによって食べられています。ただし、ListBox の Items プロパティは、サイズ情報を含まないビューモデルを返します。自動サイズ調整が必要なビューモデルのテンプレートも同様です。

4

1 に答える 1

0

コンテナが作成されていない (つまり、ビューポートの境界外にある) 場合は、ListBox テンプレートの子である ScrollViewer を取得し、ScrollToHorisontalOffset メソッドを呼び出して項目のコンテナを作成する必要があります。その後、コンテナの生成を強制するために UpdateLayout も呼び出す必要があります。ここで、新しく作成されたコンテナにアクセスできます。in には RenderSize の正しい値がありませんが、要素を測定してその DesiredSize を取得できることに注意してください。

リストボックスが折りたたまれている場合、またはコンテナーの生成が開始されていない (または終了していない) 場合、ContainerFromItem は null を返す可能性があることに注意してください。ItemContainerGenerator.Status プロパティを確認してください。

于 2013-06-19T20:34:15.647 に答える