問題タブ [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.
wpf - ItemsControl 内のアイテムのレンダリングの問題
簡潔にします。ItemTemplate を実装する ListBox があります。DataTemplate にはチェックボックスが含まれています。約2000アイテムをロードします。最初の 5 項目を確認し、一番下までスクロールして最後の 5 項目を選択します。次に一番上の項目までスクロールすると、最初の 5 つのチェック項目が変更されていることに気付きました。
これ以外に良い説明があることを願っています - これは MS のバグです。これは、.NET 3.5 および 4.0 で発生します。VirtualingStackPanel.IsVirtualizing が false に設定されている場合、この動作は発生しませんが、実際の状況では、仮想化なしでロードするのは苦痛です。
いくつかの洞察はいいでしょう。
前もって感謝します、
アンドレス・オリバレス
.net - VirtualizingStackPanel が折りたたまれたアイテムを正しく処理しない
ListView
フィールドのリストを表示するために使用される in wpf があります。プロパティ値に基づいて、一部のフィールドを実行時に折りたたむことができます。実行時に折りたたまれた ListViewItem 用に予約されたスペースを ListViewew が折りたたまないことを除いて、正常に動作します。
Snoop で追加の ListViewItems を確認できます (Visibility は Collapsed です)。ListView もアイテムを上に移動しますが、高さを調整して空のスペースを削除しません!
VirtualizedStackPanel
ItemsPanel を StackPanel に変更すると問題が解決するため、これが発生していると確信できます。関連するListView
XAML は次のとおりです。
これは のバグVirtualizingStackPanel
ですか? 他の誰かが同様の問題に直面しましたか? 回避策はありますか?
アップデート:
接続時にこのバグを MS に報告しました - https://connect.microsoft.com/VisualStudio/feedback/details/734113/virtualizingstackpanel-not-handling-collapsed-items-correctly
wpf - アイテムをトリミングしない仮想化パネル
したがって、アイテムがスクロール領域の最後でカット/クロップされている場合、クロムのないコレクションを持つのは本当にばかげているように見えます。
コレクション (ItemsControl/ListBox) の仮想化パネルを作成して、アイテムの一部ではなく、アイテム全体のみを描画したいと考えています。例えば:
アイテム/コンテナ全体を表示する余地がない限り、3 番目の部分コンテナを表示したくありません。例では、スペースが不足しているため、3 番目の項目がトリミングされています。
助言がありますか?車輪の再発明を試みる必要がありますか (独自のものを構築しますVirtualizingWholeItemPanel
)?
編集:
VirtualizingPanel.ScrollUnit
Microsoftは、この機能を実行することをまったく意図していないことを明らかにしました。古いonVirtualizingPanel.ScrollUnit
と非常によく似た目的を果たしているようです。CanContentScroll
ScrollViewer
wpf - ItemsPresenterをオーバーライドして、通常のスタックパネルの代わりに仮想化StackPanelを使用することは可能ですか?
バックグラウンド
TreeViewから継承し、データグリッドスタイルで表示するように変更されたカスタムコントロールがあります。私が見ている問題は、ツリーを拡張するときのパフォーマンスにあります。これは、ツリービューに関する私の調査から一般的です。WPFパフォーマンスツールで調べたところ、ItemsPresenterクラスが仮想化スタックパネルではなく通常のスタックパネルを使用していることに気付きました。
これは、ScrollContentPresenterが使用されるコードのセクションです(画像に表示されています)。
渡されるテンプレートは次のとおりです。
質問
アイテムプレゼンターに仮想化スタックパネルの使用を強制することは可能ですか?
ノート
- すでにItemsPresenterをScrollViewerでラップしようとしましたが、望ましくない結果が得られます(各行のスクロールバー)。
- オプションCanContentScroll=trueをテストとしてハードコーディングしました。これは、falseに設定すると仮想化が無効になるためです。
- このコントロールは本番環境にあり、複数の場所で使用されているため、現時点では、デザインを置き換えたり、書き換えたり、大幅な変更を加えたりすることはできません。可能であれば、この1つのセクションをオーバーライドすることを検討しています。
任意の提案やオプションは大歓迎です。
解決済み:
これをスタイルに追加してテンプレートのスタイルを変更すると、スタックパネルが仮想化に切り替わりました。
c# - Virtualizing ListViewがいつかすべてのアイテムを生成する原因は何ですか?
明確にするために編集:
私のアプリケーションには2つのListViewがあります。最初のものには、List <KeyPair <String、List<Elements>>が含まれています。リスト内のアイテムの表示は、キー(文字列)のみを表示するようにテンプレート化されています。ユーザーがこのリスト(SelectionChanged)でアイテムを選択すると、2番目のListViewのItemSourceがキーペアの値に変更されます。
これは、列幅がAutoのグリッド内に配置されます。
スタイルSearchListStyleには、キーを示すTextBlockのみが含まれます(KeyPairが含まれているため)。ElementLVは、Runsがさまざまなプロパティと要素のToString値にバインドされた小さなテキストブロックです。
SearchResultsリストビューに表示できるこれらのリストには、多数の要素(100k以上)を含めることができます。私はIsVirtualizingを2番目のリストビューに配置しましたが、ほとんどの場合、それは魅力のように機能します。
しかし、時々、私はそれを引き起こす原因に完全に指を置くことができません(多分アイテムを選択するためにクリックするのが速すぎますか?)アプリケーションはそれがリスト内のすべてのアイテムを生成しなければならないと決定します(これは明らかに望まれていません)...
誰かが私を正しい方向に向けることができますか?SearchResultsがすべてのアイテムの生成を要求する理由はありますか?
測定時に、すべてのアイテムを測定しようとすると、アイテムの幅とSearchResults ListViewにリンクできますか?
windows-8 - VirtualizingStackPanelでアイテムを参照する
VS11が提供するC++Metroアプリテンプレートである「グリッドアプリケーション」で遊んでいます。メインディスプレイは、VirtualizingStackPanelに表示されるアイテムのコレクションです。
実際のアイテムは、StandardStyles.xamlで定義されているStandard250x250ItemTemplateデータテンプレートを使用して表示されます。これの表示要素の1つはグラフィックです。
実行時にグラフィックを変更できるように、特定のアイテムを参照する方法を理解しようとしています。ScrollViewerとGridViewにはオブジェクトが関連付けられているので、それらにアクセスできますが、そこから個々のアイテムに移動する方法がわかりません。
これらはすべて私にとってまったく新しいものなので、優しくしてください。:)
.net - サイズ変更時の VirtualizingStackPanel の不安定な動作
モードを「リサイクル」に設定してVirtualizingStackPanelを使用するカスタムコントロールに取り組んでおり、次の問題に遭遇しました: http://i.imgur.com/XoarX.png
しばらく列幅を「遊んで」からウィンドウを最大化すると発生します。何が原因なのかわかりません。PrepareContainerForItemOverride が呼び出され、セルの幅を確認しましたが、正しいです。セルを保持する StackPanel が内容を再配置していないようで、強制的に再配置する方法がわかりません...
あまり詳しく説明していないことは承知していますが、同様の問題を抱えていて、たまたま解決策を知っている人もいるかもしれません。
編集: 関連部分の XAML:
各行 (単純なコントロール、XAML とは無関係) は CellPresenter を保持し、行は VirtualizingStackPanel にスタックされます。ItemsPanelTemplate で確認できる水平方向の StackPanel のレイアウトが更新されていないようです。
wpf - WPF リストビュー仮想化モードでは、バインド中に問題が発生します
新しいクラス (リストビューから派生) を作成しました。
このリストビューは、ビューモデルを持つビューの一部です。このビューモデルには、1)myView(ICollectionView)... と isWritable(bool) という 2 つの主要なプロパティがあります。
各リストビュー項目 (リストビュー内の行) には、一連のコントロールを表示するコントロール テンプレートがあります。
これらのコントロールのいくつかの可視性は、「isWritable」プロパティによって決定されます...FindAncestor メソッドを通じて。
問題は..このリストビューをスクロールすると、プロパティの値が「True」であっても、「isWritable」プロパティを使用して有効/無効にするコントロールの一部が無効になることです。
リサイクルを削除すると、問題なく動作します...この問題は、古いコンテナを再利用するためだと思います.FindAncestorでバインディングが完全に発生していません。
ご覧のとおり、ここでは仮想化を使用しており、アイテム パネルはリサイクルされています。したがって、itempanel を再利用すると、FindAncestor を使用して期待どおりにデータバインディングが行われないと思います。
どんな助けでも大歓迎です!
xaml - xaml で電卓のようなインターフェイスを作成する方法は?
XAML を使用して電卓のようなインターフェイスを作成したいと考えています。最大 1000 個のボタンを含める必要があります。スタック パネルの仮想化について読んだことがありますが、それをリストボックスで使用し、コンテンツのリストでデータ バインディングを行う方法がわかりません。 . スタック パネルの概念の仮想化について教えてください。
c# - VirtualizingStackPanel と TextWrapping のバグ? ウインドウズの電話
で奇妙な振る舞いをしていVirtualizingStackPanel
ます。TextBlock
withを含むアイテムのリストがありますTextWrap="Wrap"
。コードは次のとおりです。
それはかなりうまく機能しますが、非常に高速にスクロールしようとすると(プログラムではなくエミュレーターでマウスを使用)、スクロールに多少の遅れがあり、おそらくHorizontallOffset
間違った計算をし、下部で非常に奇妙な結果になります(画像、右の画像を参照)正常な動作を示します)。
調査の後、私はその問題を組み合わせて理解し、このカップルから 1 つの要素を削除するVirtualizingStackPanel
とTextBlock.TextWrap="Wrap"
、すべて正しく動作します。
TextWrap
しかし、アイテム数が多く、正しいテキスト表示のために仮想化が必要です。
そこで、Virtualizing Panel を独自に実装することを考えています。これを行う方法、または現在の問題を修正する方法を教えていただけますか?
UPD: 問題:
最初の 2 つの画像ListBox
は既に (!) 一番下までスクロールされていますが (これ以上下にスクロールすることはできません)、要素が正しく配置されておらず、正しい配置が右の画像に示されています。これは、非常に速くスクロールする場合にのみ発生します。
UPD2: Milan Aggarwal に感謝します。彼はここで私の問題の良い例を提供してくれました。それは本当にバグのようListBox
です。ListBox
アイテム内のコントロールを操作する必要があるため、提供された回避策は私のシナリオには適合しません。今、私はManipulationCompleted
イベントをキャッチして、それが であるかどうかを確認しようとしていInertial
ます。そうであれば、それはスクロールを意味し、ページにフォーカスを設定します:
PS 幸運を祈ります;)