今頃WPFの話です。
以前からWPFに興味は合ったものの、どうにも良くわからなくて放置してたのですが、仕事でWPFを触る機会があって、それでちょっと覚えたので
個人的に使ってる自作ツール(C#2.0で当然Windows.Formで作成)をWPF化しようとしています。
で、前バージョンではDataGridViewを使っていて、セルのタイプがCheckBoxやComboBoxタイプだと1クリック目で編集可能状態、2クリック目で編集っていう2クリックの操作が必要になるんですね。
で、1クリックで操作したい場合、DataGridView.CellEnterイベントで目的のセルだった場合にDataGridView.BeginEdit(false);とかすると、目的を達成できます。
で、WPFではDataGridコントロールを使う訳ですが、DataGridViewと同様に編集するのに2クリック必要なんですね。
でもCellEnterに相当するイベントは見当たらないので同じ方法は使えないっぽい。
で、ググって出てくる日本語のサイトだと、DataGridTemplateColumn使ってUpdateSourceTriggerにPropertyChangedとか指定してる方法が見つかるんだけど、
ソレとは別の方法が海外サイトにあって、自分のケースではソッチのほうが合ってたのでちょっと改良してみた。きっと忘れるから未来の自分へのメモ。
<Style TargetType="DataGridCell"> <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True" /> <Condition Property="IsReadOnly" Value="False" /> </MultiTrigger.Conditions> <Setter Property="IsEditing" Value="True" /> </MultiTrigger> </Style.Triggers> </Style>
これをWindow.Resources要素の中で定義するだけ。
元のコードはTriggerでIsMouseOverがTrueの場合にIsEdittingの設定するだけだったけど、それだとIsReadOnly無視して編集できちゃうのでMultiTriggerにしてみた。
これなら普通にDataGridComboBoxColumnやDataGridCheckBoxColumn使えるので楽ちん。
あ、件の自作ツールは公開することは無いです。こんなん公開できねぇ・・・
類似画像検索ツールのWPF化は・・・需要ないだろうしなぁ。