問題タブ [virtualizingstackpanel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
silverlight - Silverlight には VirtualizingStackPanel がありますか?
Silverlight にはVirtualizingStackPanelがありますか? 組み込み型がない場合、これを実装するサードパーティのコントロールはありますか?
wpf - WPFのstackpanelとvirtualizingstackpanelの違いは何ですか?
WPFのstackpanelとvirtualizingstackpanelの違いは何ですか?
wpf - ネストされたコンテナー (virtualizingstackpanel) を WPF の単一の親スクロールバーに仮想化する
私は自分自身をこのピクルスにコード化しました。このMSDNの記事 やネット上の他の多くの場所でTreeListView
説明されているものと同様のカスタムWPFコントロールを作成しています。現時点では、かなり大きな山がカスタム化されており、仮想化の面を除いて、私の目標をかなりうまく満たしています。私のオーバーライドとテンプレートはどちらもs を使用してアイテムを表示しており、これらすべてが期待どおりに作成されていることを確認しました。仮想化はルート レベルのアイテムで正しく機能します (現在 に表示されている UI 要素のみがクックアップされます)。TreeView
TreeViewItem
VirtualizingStackPanel
ScrollViewer
TreeView
スタッフは、折りたたまれたノードの要素を生成しないようにします。ノードを展開するときに問題が発生します。すべての要素は、ノード内のすべての子に対してクックされます。画面外にある何千もの要素も含まれます。
VirtualizingStackPanel
私がする必要があるのは、内部のネストされたs の scrollowner プロパティを、ルート レベルの VSP がデフォルトで接続されるのと同じメイン スクロールビューに何らかの方法で設定することだけのように思えましたが、MSFT のポスターをここで読みました。仕事。
残念ながら、これは仮想化が行われないと泥のように遅いので、何らかの解決策を考え出す必要があります。どんな提案でも大歓迎です。
wpf - VirtualizingStackPanel +MVVM+複数選択
ViewModelを使用してIsSelected値を格納し、をViewModel IsSelectedにバインドすることにより、この投稿で説明されているものと同様の選択パターンを実装しました。ListViewItem.IsSelected
一般的には動作しますが、深刻な問題が発生します。VirtualizingStackPanel
リストビューのパネルとしてaを使用すると、表示されているものだけListViewItem
が作成されます。「Ctrl+A」を使用してすべてのアイテムを選択するか、最初のアイテムで「Shift + Ctrl + End」などのショートカットの組み合わせを使用すると、すべてのアイテムが選択されますが、非表示のアイテムの場合、ViewModelはIsSelectedを取得しませんtrueに設定します。ListViewItem
が作成されていない場合、バインディングが機能しないため、これは論理的です。
誰かが同じ問題を経験し、解決策を見つけました(を使用しないことは別としてVirtualizingStackPanel
)?
wpf - ItemsControl、VirtualizingStackPanel、および ScrollViewer の高さ
ItemsControl を使用して、重要なアイテムのリストを表示したいと考えています。
私が ItemsControl を使用している理由は、私が取り組んでいるアプリケーションでは DataTemplate がはるかに複雑だからです。提供されているサンプル コードは、私が抱えているサイジングの問題のみを反映しています。
をお願いします :
- 表示する項目が多いため、仮想化する ItemsControl
親コンテナー (グリッド) に自動的に拡張するサイズ
背後にあるコードは次のとおりです。
ScrollViewer の高さを 400px に強制すると、ItemsControl の仮想化は期待どおりに機能します。ItemsControl は、リストに含まれるアイテムの数に関係なく、非常に迅速にリストを表示します。
ただし、Height="400px" を削除すると、親コンテナーの高さに関係なく、リストの高さが拡張されてリスト全体が表示されます。さらに悪いことに、コンテナの背後に表示されます。
スクロールビューアを ItemsControl の周りに配置すると、期待どおりの視覚的な結果が得られますが、仮想化がなくなり、リストの表示に時間がかかりすぎます。
ItemsControl の自動高さ拡張と仮想化の両方を実現するにはどうすればよいですか?
wpf - WPF での ListBox、VirtualizingStackPanel、およびスムーズ スクロール
にバインドされたListBox
を含む、テンプレート化された DB レコードの行が多数ある可能性のある があります。場合によっては、コレクションに何千ものアイテムが含まれることもあります。Image
ObservableCollection<MyItem>
パフォーマンスは優れていますが、スクロールはデフォルトのびくびくした動作です。スムーズにスクロールさせたいので、チェックを外しScrollViewer.CanContentScroll
ました。
スムーズにスクロールできるようになりましたが、パフォーマンスはひどいものです。データは別のスレッドで取得され、スレッドはすぐに終了しますが、結果が に表示されるまでに 10 ~ 20 秒かかりますListBox
。これは、チェックを外すと基になるものが通常にScrollViewer.CanContentScroll
変更され、結果を表示する前にコレクション全体が読み込まれるためだと思います。VirtualizingStackPanel
StackPanel
VirtualizingStackPanel
だから私の質問はこれです:動作とパフォーマンスを犠牲にすることなくスムーズなスクロールを維持するにはどうすればよいですか?
wpf - IsVirtualizing="true" を指定した WPF TreeView は、フォーカスを変更してスクロールするとジャンプします。
で発生している問題を再現する簡単な例を作成しましたTreeView
。で項目を選択し、TreeView
下にスクロールして を変更しFocus
、再度 で項目を選択するとTreeView
、リストが飛び回り始めます。
これは、持っている場合にのみ発生しますVirtualizingStackPanel.IsVirtualizing="True"
。これは既知の問題ですか? 回避策はありますか?
再現するには:
- リストで項目 1 を選択します。
- リストの一番下までスクロールします
- 上部の TextBox をクリックします。
- リストで項目 30 を選択します
私は .Net 3.5 SP1 を使用しており、64 ビット XP および Vista で試しました。他の環境では試していません。
更新: .Net 4.0 Beta でテストしましたが、問題は発生しません。どこかにホットフィックスはありますか?
どんな助けでも大歓迎です!!!
wpf - ItemsControlを仮想化しますか?
ItemsControl
仮想化したいデータのリストが含まれていますが、では機能VirtualizingStackPanel.IsVirtualizing="True"
しないようですItemsControl
。
これは本当にそうですか、それとも私が気付いていない別の方法がありますか?
テストするために、次のコードブロックを使用しています。
をに変更するItemsControl
とListBox
、イベントが数回しか実行されないことがわかりますInitialized
(マージンが大きいため、いくつかのレコードを通過するだけで済みます)が、ItemsControl
すべてのアイテムが初期化されます。
をに設定してみItemsControlPanelTemplate
ましたVirtualizingStackPanel
が、役に立たないようです。
wpf - ツリービュー (WPF) 内でパネルを取得する方法
内で使用されるパネルを取得するにはどうすればよいTreeView
ですか? デフォルトではこれに a をTreeView
使用することを読みましVirtualizingStackPanel
た。テンプレートを見るTreeView
と、<ItemsPresenter /> しか表示されず、使用されているパネルの詳細が隠されているように見えます。
可能な解決策:
1) ツリービュー インスタンス (「tv」) で、コードから、tv.ItemsPanel を実行します。
問題は、これがパネルではなく、ItemsPanelTemplate (「項目のレイアウトを制御するパネルを定義するテンプレートを取得または設定する」) を返すことです。
2) <ItemsPresenter /> を独自の ItemsControl.ItemsPanel に明示的に置き換える TreeView テンプレートを作成します。とにかく特別なテンプレートを提供しているので、これは私のシナリオでは問題ありません。次に、そのテンプレート内に配置するパネルにパーツ名を付けます。コードからそのパーツ (つまり、パネル) を取得できます。これの問題?下記参照。
(以下に示すように、TreeView から派生した VirtualTreeView という名前のコントロールを使用しています):
[見やすくするために、ここでは雑然としたものをすべて取り除きました...]
これに関する問題は次のとおりです。これにより、TreeView レイアウト メカニズムが即座にオーバーライドされます。実際には、TreeViewItems がツリーを埋めている場合でも、空白の画面が表示されます。さて、私がパネルを手に入れたい理由は、MeaureOverride に参加するためですが、そのすべてに立ち入ることなく、ツリービューのレイアウト方法の本を書き直したくはありません。つまり、これをステップ 2 の方法で行うと、最初に TreeView を使用することさえ無効になるようです。
ここに混乱がある場合は申し訳ありませんが、提供できるヘルプに感謝します。
c# - ListBox の VirtualizingStackPanel をボタンでスクロールする
一度に5つのアイテムを水平に表示するリストボックスがあります。クリックすると、前の 5 セットまたは次の 5 セットが表示される「前へ」および「次へ」ボタンを実装したいと考えています。ユーザーに水平スクロールバーを表示させたくないので、水平スクロールバーを表示していません。
これを実行できる機能が既に実装されていますか、またはボタンのクリックイベントで表示しているアイテムなどを計算するコードを記述する必要がありますか?
前もって感謝します!