次の方法で共有


WPFでWindowsFormのSuspendLayoutと同等の動作

質問

2010年10月7日木曜日 8:17

WPFでWindowsFormのSuspendLayout、ResumeLayoutと同等の動作をするにはどうすればいいのでしょうか?

すべての返信 (5)

2010年10月7日木曜日 11:34 ✅回答済み

このページの以下の点にかかわってきます。
http://msdn.microsoft.com/ja-jp/library/aa970683(VS.80).aspx

ユーザー インターフェイスの仮想化
データ連結
ItemsSource へのバインディング
IEnumerable ではなく IList を ItemsControl にバインドする

DataGridならではの解決策もあります。

データはどういうコレクションクラスを使っていますか?
列数や件数はどのくらいでしょうか?
DataGridに対するプロパティ設定はどうなっているでしょうか?
DataGridの特殊な設定は使っていますでしょうか?

えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12


2010年10月19日火曜日 9:14 ✅回答済み

試してみました。

このケースの場合、DataGridの右クリックで複数選択が解除されるでなかむらさんが回答されているように、

 

試したところ、行を複数選択した状態で行ヘッダー上で右クリックすると、クリックした位置にある行が選択された後にコンテキストメニューが表示されるようですね。

DataGrid の PreviewMouseRightButtonDown イベントをハンドルして、行ヘッダ上で右クリックしたときだけ自力でコンテキストメニューを表示する、というのはどうでしょうか。

自力でコンテキストメニューを表示する際は、イベント引数の Handled プロパティを true に設定してやれば、右クリックで複数選択が解除される、という動作は回避できるかもしれません。

 

なかむら(http://d.hatena.ne.jp/griefworker)

PreviewMouseRightButtonDownイベントでコンテキストメニューのオープンなりの行いたい処理を実行後、e.Handed=true;にすることで、そもそも選択が解除される事自体を回避できました。

WPFではUIのレンダリングスレッドと通常のUIスレッドは異なります。

レンダリングの実行は即時とは限らず、現時点でレンダリングが即時反映される挙動も将来の実装では変わってくるかもしれません。

レンダリングスレッドを停止する手段はないようですが、DispatcherPriorityを駆使する事でUIスレッドとレンダリングスレッドのタイミングをある程度制御することは可能です。

DispatcherPriorityをうまく使えば、SuspendLayout/ResumeLayoutが必要になるケースはほとんどないと思います。

例)DispatcherPriorityを使用して、レンダリングスレッドに同期をとる

http://graemehill.ca/wpf-rendering-thread-synchronization


2010年10月7日木曜日 8:35

別の解決手段があるかもしれません。

どういうコントロールに対してどういうデータ(入れ物のクラスとか件数とか)を使いたいのでしょうか?

えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12


2010年10月7日木曜日 8:47

DataGridの右クリックで複数選択が解除されるに関連するんですが

コンテキストメニューのOpenedイベント時にDataGridの選択を解除して再選択時に

画面がちらつくのでSuspendLayoutと同等の動作を行いたかったのです。


2010年11月1日月曜日 5:26

こんにちは、tokagi3129 さん。

フォーラム オペレーターの山本です。

その後いかがでしょうか。
えむナウ さんや、ugaya40 さんからの情報はご確認されましたでしょうか。

えむナウ さんや、ugaya40 さん、情報ありがとうございます。お二人からの情報は有効な情報であると思われましたので、勝手ながら私のほうで一旦回答としてマークさせていただきました。
同じ問題で今後このスレッドを参照される方に、有効な情報がわかりやすくなるかと思いますので、解決に役立った有効な情報や参考になる情報には、回答としてマークすることをお願いしています。

もし現在も解決されていない、また tokagi3129 さんが問題とされている状況と異なるなどあるようでしたら、現在の状況や問題の詳細を投稿いただいて、ご質問を続けてくださいね。
今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
                                                                                   
マイクロソフト株式会社 フォーラム オペレーター 山本 春海