WindowsアプリケーションのフォームにはAcceptButtonとCancelButtonというプロパティがあります。
AcceptButton:フォームの[承諾]ボタンです。このプロパティを設定すると[Enter]が押されるたびに、ボタンがクリックされる。
CancelButton:フォームの[キャンセル]ボタンです。このプロパティを設定すると[Esc]が押されるたびに、ボタンがクリックされる。
WPFにおいてWindowsフォームに対応するものはWindowですが、AcceptButtonプロパティとCancelButtonを備えていません。
Windowsフォームのように[承諾]ボタンと[キャンセル]ボタンを実現するには、ButtonコントロールのIsDefaultやIsCancelプロパティを使用します。
IsDefaultプロパティ:プロパティウィンドウでこの項目にチェックを付けるかコードでtrueをセットすると、[Enter]キーが押されるたびにクリックされるようになります。
IsCancelプロパティ:プロパティウィンドウでこの項目にチェックを付けるかコードでtrueをセットすると、[Esc]キーが押されるたびにクリックされるようになります。
このプロパティは排他制御がされていないため、1つのボタンで[承諾]も[キャンセル]も行えるボタンを作成できてしまいます。またWindowsアプリケーションとは異なり、[承諾]と[キャンセル]を意味するプロパティがボタン自身が持つことにより、複数のボタンに[承諾]や[キャンセル]を割り当てることが出来てしまいます。
下記のようにボタンを2つ、テキストボックスを1つ配置して挙動を確かめてみます。
実験方法フォーカスをテキストボックスに置いた状態で、[Enter]または[Esc]を押す。(これはフォーカスがButton1 or Button2にある状態で[Enter]や[Esc]を押すのを防ぐためです)
1)Button1のIsDefaultとIsCancelにTrueをセット。Button2はIsDefault,IsCancelともにFalseをセット。 [Enter]を押しても[Esc]を押しても、Button1のクリックイベントが発生。
2)Button1およびButton2の両方のIsDefaultにTrueをセット [Enter]を押すとButton1にフォーカスが当たるだけで、クリックイベントは発生しなかった。
3)Button1およびButton2の両方のIsCancelにTrueをセット [Esc]を押すとButton1にフォーカスが当たるだけで、クリックイベントは発生しなかった。
4)Button1のIsDefaultにTrue,IsCancelにFalse、Button2のIsDefaultにFalse,IsCancelにTrueをセット[Enter]を押すとButton1のクリックイベントが発生。[Esc]を押すとButton2のクリックイベントが発生。
まとめ上記実験結果から、IsDefaultおよびIsCancelは・1つのボタンに同時にセットしてはいけない・複数のボタンに同一プロパティを設定してはいけないしということになります。
IsDefaultおよびIsCancelは組み合わせによっては正常に動作しないこともあるので注意が必要です。なぜ、Windowsフォームのようにしなかったのか疑問ですね
Theme design by Jelle Druyts
Pick a theme: BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2 BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2
Powered by: newtelligence dasBlog 2.0.7226.0
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2009, HIRO
E-mail