12

XML構造によって決定される列を動的に生成するカスタムDataGridコントロールがあります。

各列を作成するときは、DataGridで水平方向のスクロールが発生しないようにするために、スター付きのユニットタイプを指定しています。

            DataGridTextColumn column = new DataGridTextColumn();
            column.Width = new DataGridLength(entity.DisplaySize, DataGridLengthUnitType.Star);

ただし、DataGridがレンダリングされると、列に指定された最小サイズでレンダリングされ、DataGridが完全にレンダリングされると、DataGrid内に適切に収まるように列のサイズが変更されることに気付きました。これがちらつき効果を引き起こしています。

誰かが可能な解決策を持っていますか?たぶん、DataGridをバックグラウンドでレンダリングし、列がそわそわし終わったら表示する方法はありますか?または他のアイデアはありますか?

4

2 に答える 2

3

残念ながら、これは正常な動作です。これは、コントロールのレンダリング方法と関係があります。WPFでは、コントロールのレイヤーの上にレイヤーがあり、DataGridは、レンダリングが完了するまで、どの種類のコントロールを知る方法がありません。

したがって、最初のレイアウトパスでコントロールが作成されますが、2番目のパスを通過して、これらのコントロールの大きさを測定する必要があります。コントロールの大きさがわかると、列のサイズ変更を開始できます。

DataGridは、高度に構成可能で動的なWPFのレイアウトシステムが機能しないシナリオの優れた例です。慣れ親しんだ種類のパフォーマンスを得るには、非WPFグリッドを使用する必要があります。これにより、独自の階層をより適切に予測できるため、すべてを事前にレンダリングしなくても、これらの種類の測定を実行できます。このようなコントロールはWPFに存在しますが、それらを見つける必要があります。

これがxceedからのものです:http://xceed.com/Grid_WPF_Intro.html?gclid = CNKE8rOBtrICFQfonAodHQ8AEA

これがTelerikからのものです:http ://www.telerik.com/products/wpf/gridview.aspx

(柔軟性とパフォーマンスのバランスをとる必要があること、および最新のデータグリッドに期待される多数の機能のため、このコントロールはコントロール開発の頂点として長い間保持されてきました。優れたデータグリッドを構築することは非常に困難です。Excelでは、Microsoftがアプリケーション全体、基本的には、栄光に満ちたデータグリッドです。言うまでもなく、探しているものが無料で見つからない可能性があります。)

この質問を参照してください:WPFDataGridとWindowsフォームDataGridView

于 2012-09-14T21:26:53.943 に答える
0

バックグラウンドでレンダリングするつもりはないと思います。レイアウトを行う方法には2つのパスがあります。

レイアウトシステム

ボタンがListItemであるボタンクリックでこれに見舞われます。ボタンを使用すると、上記のコンテンツが変更され、同じ場所に別のボタンが表示されるようにボタンの位置が変更されます。クリックイベントは間違ったボタンに対して処理されます。私がコードを分解して、SOに投稿するのが簡単なものに分解しようとすると、それは機能します。

DataGridで私が扱う方法は、ListView GridViewであり、各列の幅を計算します。

于 2012-09-14T20:59:58.633 に答える