問題タブ [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 - VirtualizingStackPanel がテーマの適用時にメニュー項目を垂直方向に整列させない
WPF テーマ (BureauBlue.xaml テーマ) を適用する前に、メニュー項目が以下のコードで垂直方向に並んでいるのを確認できます。
しかし、テーマを適用すると、同じロジックでメニュー項目が水平に配置されます。
これを解決するために私を助けてもらえますか?
windows-store-apps - 画面外にスクロールすると画像が失われます
私は、ItemsPanel として VirtualizingStackPanel を持つ GridView を持っています。アイテムは、viewModel のモデル オブジェクトのコレクションにバインドされています。itemtemplate でバインドしている特定のプロパティは、画像と 3 つの文字列です。アプリが起動すると、すべてが期待どおりに機能します。ただし、アイテムを画面外にスクロールして戻すと、画像が消えます。文字列は引き続き期待どおりに動作します。ItemsPanel をスタック パネルに変更した場合、この問題は発生しないため、virtualizingstackpanel に関係していると確信しています。問題のデバッグを開始する場所がわかりません。
どんな回答でも大歓迎です。
ありがとう、ジェームズ
wpf - ドロップダウンに表示される wpf コンボボックスの最初の項目を取得する方法は?
VirtualizingStackPanel クラスを使用する ComboBox 内に大きなリスト (〜 10000 項目) があります。スクロールのパフォーマンスは良好ですが、GUI に表示される一番上のアイテムを特定する方法を知りたいです。これは必ずしもインデックス 0 のアイテムではなく、現在スクロールされているアイテム リストの一番上にあるアイテムです。? ありがとうございました。
windows-store-apps - 画像の遅延読み込みのために VirtualizingStackPanel でアイテムの可視性を検出する
これが私のシナリオです:
ネットワーク サービスから取得したデータを表示する Gridview があります。データ数がかなり多くなる場合があります。そのため、VirtualizingStackPanel を使用してコンテンツを表示します。これらのデータの一部は、レンダリング時に画像の取得が必要になる場合があります (遅延読み込み)。
私の (非常に限られた) 理解では、VirtualStackPanel は、データのレンダリングを必要とするグリッドとして自動的にデータを要求します。レンダリングが必要な要素が画像タイプの場合、プレースホルダー画像を送信し、非同期ネットワーク呼び出しを送信してその画像を取得します。
しかし、すべての要素をレンダリングするための呼び出しが受信され、その結果、画像を取得するための大量のネットワーク呼び出しが送信されることに気付きました (ほとんどのアイテムが画像タイプの場合)。
質問: VirtualizingStackPanel のコード (XAML または C#) で構成する必要があるものはありますか? または、項目が実際に表示されているかどうかを検出してネットワーク呼び出しを発行する必要がありますか?
これが私のXAMLです。
XAML で画像にバインドされているアイテムのプロパティは次のとおりです。
サムをダウンロードするための非同期呼び出しは次のとおりです
c# - VirtualizingStackPanel の ListBoxItem の高さ
UI 全体のサイズがパーセンテージで決まるアプリを開発しています。したがって、ListBoxItems の高さもそれによって制御する必要があります。しかし、私はそれを機能させるのにいくつか問題があります。
リスト ボックス スタイル:
ListBoxItemStyle:
私は他の場所を使用する PercentageConverter を持っていますが、それは魅力のように機能します。しかし、このシナリオでは、呼び出されないか、効果がないように見えます。項目の高さが ListBox 自体よりも大きい。
wpf - .Net 4.0 の VirtualizingStackPanel.CacheSize の代替
virtualizingstackpanel が、可視アイテムの周りにアイテムを視覚化することを決定する際に考慮する要因は何ですか?
例: リストビューがある場合、アイテム 7 を表示すると、アイテム 6 と 8 も表示されますが、表示されません。
視覚化されたアイテムのみが視覚化されるように、視覚化されたアイテムを制限するにはどうすればよいですか?
c# - wpf scrollviewerのスタックパネルの仮想化で表示されているすべてのコンテナでメジャーを呼び出す方法
目標: スクロールビューアの仮想化スタック パネルに表示されているシグナルグラフのみを再測定して再描画します。
現在のビルド:
現在、スクロールビューアー (シグナルグラフ) のコンテナーが更新されるたびに測定に影響を与える依存関係プロパティ (UnitsOfTimePerAxisDivision) があります。
ただし、これにより、表示されていないものも含め、すべてのシグナルグラフが更新されます。すべての信号に対して測定を実行してから再描画するのは、時間がかかりすぎます。
- 表示されているものだけを更新するにはどうすればよいですか?
こんな実験をしようと思ったのですが、
WPF では、コントロールがユーザーに表示されるかどうかをどのように判断できますか?
基本的に、各シグナルが表示されるかどうかをテストする propertychangedcallback を設定します。最終的にすべての信号をテストすることになりますが、少なくともすべての信号を描画することはありません。
私の2番目の質問は、測定/配置で呼び出される関数に依存してこれを実装できる方法があるかどうかです.
スタック パネルの仮想化に関する私の理解は次のとおりです。トップ レベルには、スクロールビューアを含むツリービューがあります。scrollviewer の controltemplate には、scrollcontentpresenter が設定されたサイズの列と行内にアイテムを配置するグリッドが含まれています。
ですから、scrollviewer に再測定するよう指示し、scrollviewer が画面上で 100x100 を占めるとしましょう。これにより、利用可能なサイズが 100x100 の grids.measure(利用可能なサイズ) を呼び出して、スクロールビューアーがグリッドを測定します。
次に、グリッドはスクロールバーのサイズを差し引き (10 と推測します)、scrollviewerpresenter にそれ自体を 90x90 で測定するように指示します。プレゼンターは仮想化スタックパネルを使用します。これにより、子供たちは無限のサイズで自分自身を測定できます (垂直方向と水平方向の両方であると思います)。ただし、仮想化スタック パネルは、90x90 のサイズがいっぱいになるまで子 (シグナルグラフ) のみを測定し、その後、配置フェーズはスクロールビューアーから仮想化スタック パネルに進みます。
その場合は、signalgraph の Arrange メソッドの最後で呼び出しを行うことができ、画面上のシグナルグラフのみを配置して再描画する必要があります。
ただし、スクロールビューアーとシグナルグラフの両方のメジャーオーバーライドにブレークポイントを設定すると、シグナルグラフのブレークポイントがヒットしません。
スクロールビューアを再測定すると、シグナルグラフが再測定されない理由がわかりません。
メジャー関数が、親から渡された最後のサイズ制約 (availableSize) を格納し、制約が変更されない限り、新しいメジャーを実行しない場合はありますか? 測定にならない可能性があると私が考えたもう1つの可能性は、スクロールビューアが子のサイズとは無関係にサイズを計算し、サイズが新しい場合にのみそれらを測定する場合です。
しかし、おそらく問題はこのようなものです。誰かがリフレクターを持っていて、実際のスクロールビューアーのメジャーオーバーライド コードを入手できたら、それは素晴らしいことです。そうでない場合は、明日リフレクターを入手して、その使用方法を見つけようとするかもしれません.
override Measureoverride ( size availableSize) { Size newSize = availableSize. if (availableSize != this.DesiredSize) { Chilren() を測定します。} }
そうでない場合、シグナルグラフが測定されない原因は何ですか?
編集:
ええ、仮想化するものがあります。私は完全に頭がおかしいわけではありません。ほとんどクレイジーです。このスタイルを適用すると、仮想化が壊れてしまうようです。それを削除すると、すべてが機能します。
組み込みの仮想化を使用することは、存在する各シグナルグラフの可視性を実際にテストしようとするよりもはるかに優れています。上記の #2 に対する答えはまだわかりませんが、この仮想化を機能させることができれば、それは必要ありません。ただし、現在のスタイルを維持し、そのスタイルが仮想化を壊している理由を理解したいと思います。
編集2:
このページで解決策を見つけました: このページで解決策を見つけました:
デフォルトの scrollviewer スタイルをオーバーライドするときに、添付プロパティを scrollviewer contentpresenter にバインドしませんでした。うーん、その1行を見つけるのがどれほど難しいかは驚くべきことです。私は、仮想化が実際に何をするべきなのかわからないと思って、頭がおかしくなりました。
今の唯一の厄介な点は、レイアウト プロセスがどのように機能するかをまだ完全に理解していないことです。依存関係プロパティに metadaoption Effectsmeasure が指定されている場合、依存関係プロパティが変更されると、項目が再測定されます。要素のサイズが変更された場合、親は再測定しますか?
それは私の推測ですが、スクロールビューアの測定サイクル中に再測定されなかったスクロールビューアの子があった理由はまだ説明されていません。