DataGridCellにツールチップ(Tooltip)を(壱)

WPF4でアプリ開発を始めて、少し経った頃の話。

後輩:ちょっと良いっすか。
俺:だめ。
後輩:DataGridって、列幅を狭めるとセルの中身が一部しか見えなくなるじゃないっすか。
俺:聞けよ。まあ、そうだね。
後輩:そういうときって、ツールチップ出せないっすか?
俺:ああー、ツールチップかー。まあちょっと調べようか。


列いっぱい(40~50)、文字列いっぱい(最大500文字)のデータをDataGridに表示する時、内容を参照するために逐一列を広げるのはめんどくさい。確かに欲しいよなぁと思いながら、やっぱりここだよね!とStackOverflowを調べる。

俺:これなんかどうっす?
後輩:どうっす?おお。とりあえず使ってみるっす。

しばらくして、後輩が再び来襲。

後輩:先輩、さっきの奴、ちょっと駄目っすね。
俺:ちょっと駄目っすか。
後輩:ええ。こいつ、DataGridTemplateColumnで使うと、ツールチップが出ないっすね。後、中身が空でもToolTipが出るっすよ。
俺:出てるっすね。
後輩:空の時、(ツールチップ)いらないっすよね?ええ、いらないです。というわけで、どうにかしてほしいっす。
俺:それ、「ちょっと」じゃないだろ。

しかし、調べても良い情報が出てこない。やっぱり上の記事が一番使えそうだった。仕方ないので、上の記事から発展させることにした。
課題は二点。
〇DataGridTemplateColumnでは使えない。
 DataGridTemplateColumn以外は、何とかなりそうなのに。 確かに、DataTemplateは、その気さえあれば、いくつものコントロールを組み合わせられるので、どこから値を取得して良いかはわからない。そこで、Converterを使って、ToolTipに表示する文字列を取得する事にした。手順はこんな感じ。
1.ToolTip対象のDataGridCellにバインドされるプロパティ名を取得する。
  列のソートに必要な、SortMemberPathプロパティ名が設定されていれば、それを使う。なければ、Binding情報から取得する事にしよう。
2.取得したプロパティ名から値を取得する。
 Bindingが使っている、TypeDescriptorを使って取得することにした。結局中身はReflectionかな。

〇セルの中身が空でもToolTipが出てくる。
 セルの中身が空かどうかなんて意識していないし、Visibiityプロパティに何も設定していない。
 セルに表示される内容を取得できたら、後はそれをVisibilityに変えるだけなので、上の課題をクリアできたら何とかなるか。

続く
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m