問題タブ [ui-virtualization]
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 - Windowsクラシックテーマ(エアロ無効)を使用するWindows2008サーバーR2でWPF仮想化が機能しない
Windows Server2008R2で奇妙な問題が発生しています。仮想化が有効になっているWPFアプリがあります(仮想化スタックパネルとツリービューの遅延読み込み)。これは、Windows7システムで実行されたとおりに機能します。ただし、クラシックなウィンドウをテーマにしたWindows 2008 R2システム(エアロ別名デストップエクスペリエンスがオフになっていない)では、そうではありません。デバッグすると、コントロールのプライベートプロパティは仮想化が有効になっていることを示していますが、すべてのデータが仮想化モデルを介してフェッチされていることがわかります。
編集:ユーザーエクスペリエンスなどを有効にしましたが、windwos7テーマは有効にしませんでしたが、問題は解決していません。これはTreeViewコントロールにあります。私はこの手法を使用してデータ仮想化を有効にします:http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx
何が起こっているのかについてのアイデア
c# - ネストされた ScrollViewer を使用した ScrollIntoView
私のアプリケーションでは、ScrollViewer でラップされた Canvas があります (Canvas は画面サイズよりも大きいです)。このキャンバスには、他のコントロールを配置しました。キャンバス上の要素の 1 つには、仮想化された DataGrid が含まれています (2000 行以上あるため、スクロールも含まれます)。これで、行要素のいくつかの値に基づいて DataGrid 内の行を選択する関数ができました (自動的にトリガーされます)。行が選択されたら、私は呼び出します
完全に正常に機能しているもの。実際のところ、それは順調に進んでいます。私が望むのは、DataGrid の要素が選択され、DataGrid が正しい位置にスクロールすることです。しかし、私の Canvas scrollviewer もどういうわけかこのリクエストを受け取り、そこでスクロールしています。
ScrollChangedEvent をインターセプトして、handled フラグを設定しようとしました。しかし、それは機能していません。
質問:
1) ローカル ユーザー コントロールへの ScrollIntoView 呼び出しの効果を制限するにはどうすればよいですか。
2) それができない場合、自分でスクロールするにはどうすればよいですか? スクロールビューアの垂直オフセットを計算する必要がありますが、仮想化されているため、行の高さを調べる方法がわかりませんか?
助言がありますか?
プリンシパルのセットアップを示す簡単なサンプルを追加しました。ボタンの 1 つを押すと、キャンバスを含む ScrollViewer ではなく、DataGrid のみをスクロールします。
silverlight-4.0 - 書き込み可能なビットマップを持つアイテムを含むリストボックスの Silverlight UI 仮想化
1.サムネイルリストと2.画像のリストボックスの2つの列を持つ表示コントロールを作成しました。画像は書き込み可能なビットマップに書き込まれ、リストボックス項目に追加されます。
複数のインスタンスを開くことができるように、カスタム タブ コントロールを作成しました。ここでの問題は、複数のタブが開いている場合であり、メモリ使用量は最大 1.2 GB になります。
リストボックス自体はUI仮想化を使用していますか?
これに対するより良い解決策があるかどうか知りたいです。
wpf - DataGrid のスクロールの問題を修正すると、パフォーマンスとメモリの問題が発生する
WPF データグリッドのスクロールに問題がありました。いくつかの分析により、 ScrollViewer.CanContentScroll = true が原因であることがわかりました。削除して false にすると、スクロールの問題が修正されました。しかし昨日、誤って 50k レコードをバインドしたために、WPF アプリケーションのメモリ フットプリントが 1.3Gb を超えて増加したバグを分析していました。それでも、10,000 レコードをバインドする能力に疑問を呈しました。ユーザーはページネーションを望んでいません。(それは要件であり、それについてはあまりできません!)
ScrollViewer.CanContentScroll = false を設定すると、UI 仮想化が false になります。これにより、WPF がすべてのレコードをバインドし、画面にレンダリングします。その結果、メモリ フット プリントが爆発的に増加し、パフォーマンスの問題が発生します。
今のところ、バインドするレコードが最小限の場合は ScrollViewer.CanContentScroll= false を設定し、そうでない場合は true に設定します。
要するに、スクロールの問題または UI の仮想化で行き詰まっています。両方を修正できるものはありますか?データの仮想化について読んだことがありますが、本当にそこまでする必要があるのでしょうか? 私たちを助けることができる.net4.0から箱から出して何か不足していますか?
wpf - 非表示(仮想化)アイテムのListViewでIsSelectedをバインドする方法
WPFアプリケーションで大量のデータを処理する必要があります。
大きなコレクションをListViewItemContainerStyle
にバインドし、を使用してリストアイテムのIsSelectedプロパティをオブジェクトのIsSelected
プロパティにバインドしているため、アイテムがで選択されるListView
と、オブジェクトのIsSelected
プロパティもtrueに設定されます。これを行うことで、リストで選択されたオブジェクトのみに対してコマンドを簡単に実行できます。
ListViewでUI仮想化を使用しているのは、そうしないとアプリが遅くなるためです。ただし、コレクション全体のサブセットのみがリストに表示されるため、CTRL + Aを使用してリスト内のすべてのアイテムを選択すると、ロードされたアイテムのみのIsSelected
プロパティがtrueに設定されます。表示されていないアイテム(仮想化されているアイテム)のIsSelected
プロパティはfalseに設定されています。これは問題です。リスト内のすべてのアイテムを選択するとIsSelected
、コレクション内のすべてのアイテムに対してプロパティがtrueに設定されていると予想されるためです。
問題を説明するために、いくつかのサンプルコードを作成しました。
MainWindow.xaml
MainWindow.xaml.cs
フォームの上部にあるボタンをクリックすると、「IsSelected」プロパティがtrueに設定されているコレクション内のアイテムがカウントされます。CTRL+Aを押してリスト内のすべてのアイテムを選択すると、19個のアイテムのみが選択されていることがわかります。
誰かがこの問題を回避する方法を知っていますか?パフォーマンスがひどいので、仮想化をオフにできません。
wpf - ビデオ メモリ管理のマスターとしてのスクロール ビューアー
複雑な WPF アプリケーションを最小化すると、使用メモリが減少することがわかります。また、WPF ウィンドウを復元すると、そのメモリが回復されます。
私の質問はこれです
- これは私たちがビデオメモリと呼んでいるものですか?
- WinForms アプリでも同じことが観察されますか? 最小化したときにMSWordがそのようなことをしていないのを見たので、これを尋ねています。
- また、Windows OS がこのメモリをうまく管理しているのであれば、仮想化されたスタック パネルを作成する代わりに、なぜすべてを仮想化しなかったのでしょうか。
これについて興味深い答えが得られることを願っています。
c# - データの仮想化と SelectionMode の拡張
IList と IList を実装する ItemsSource にバインドする ListBox がありますが、仮想化されていない IList にバインドする場合と比較して、SelectionMode=Extended の動作は期待したものではないようです。
IList の動作:
VirtualizedCollection:IList、IList 動作:
ブラックボックスに近い?メソッドは、2 番目のケースでは 1 を返しますが、最初のケースでは実際の行 10 を取得する、ある種の「現在選択されている行を取得」を呼び出しています。
特異性が役立つ場合、Paul McClean による WPF データ仮想化は、私が使用している virtualizedcollection 実装です。バインド時に可視化されたコレクションが使用される場合、彼のソース コードにも同じバグがあります。
wpf - Canvasに多数のコントロールを選択的にロードする方法
大きなサイズのCanvasと、その上に配置された多くの小さなユーザーコントロールがあります。一度に、キャンバスのごく一部だけが画面に表示されます。ユーザーコントロールは、ViewModelにバインドされたデータであるItemsControlによって作成されます。
現在、ユーザーコントロールの数が非常に多いため、キャンバス全体をロードするのに多くの時間がかかります。現在表示されているフレームにあるコントロールのみをロードしたい。キャンバスを移動すると、新しい表示領域の下にあるユーザーコントロールが読み込まれるはずです。これを実行したい主な理由は、多数のユーザーコントロールのロードに関連するパフォーマンスの遅れのためです。VirtualizingStackPanelがStackPanelに対して行うことをCanvasで実行したいと思います。
それを行う方法はありますか?
助けてくれてありがとう
wpf - リストビューのテンプレートを使用すると UI 仮想化が停止する
WPF のリストビューから拡張されたコントロールがあります。カスタム テンプレートを使用して「テンプレート」をオーバーライドすると、UI 仮想化が存在しなくなります。
カスタム テンプレートと一緒に UI の仮想化を手伝ってくれる人がいますか。
マイ ListView コントロール XAML
そして、テンプレート「CustomListView2」は以下の通りです。
どんな助けでも大歓迎です。
wpf - CanContentScroll = "false" の設定中に ItemsControl リストを仮想化する回避策はありますか?
ItemsControlの仮想化で学んだように? 、設定する必要があります
ScrollViewer.CanContentScroll = "true"
私のItemsControlでリストを仮想化できるようにします。ただし、これにより、でこぼこのスクロールや、展開された子の一部がウィンドウの下部で切り取られるなど、多くのスクロールの問題が発生します。私はこれを広範囲にグーグルで検索しましたが、多くの人がこれに問題を抱えているようです. しかし、私はまだ回避策に出くわしていません。
誰でもこの問題を回避できますか?