Skip to content

[WPF] ContextMenuのCheckBoxをThreeStateで表示する

ContextMenuに3つの状態を遷移するチェックボックスを付けたくなりました。
簡単にできないか調べたのですができないようだったので自作。
大した作業ではないのですが、もしまた作ることになったときに面倒なのでまとめておきます。
標準のMenuItemはIsThreeStateを使えない、CheckBoxと同様にIsThreeStateを付けてくれればこんなことをしなくてもいいのですが。

具体的には、MenuItemを継承して状態フラグを追加したMenuItemを作っておいて、それに表示用のStyleをくっつけるだけです。

完成図

こんな感じに3パターンでチェックボックスを表示できます。









テキストの位置がズレてますが3ステートが主題なので無視しています。
たぶんスタイルになにか足りてません。わかったら直します。

MenuItemを継承

Styleから参照できるように依存関係プロパティを追加するだけ。
ここではフラグをbool!で宣言しています。

ThreeStateMenuItem用のスタイルを作成

3つの状態を表示するためのスタイルを作ります。
状態フラグをbool!型で宣言しているので、falseのときには非表示、trueのときにはチェック、nullのときにはハイフン、ということにしてあります。

動作を確認するために状態を切り替える処理を作る

こっちは主題ではないので適当にコンテキストメニューを開くたびに状態をひとつずつずらしていくようにします。

まずはXaml。

コードビハインドはこんな感じ。

おしまい。

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。

*