WPFは初期フォーカスをXamlで設定できるでやんの。
Silverlightを半年ほどやった後、ほぼ経験0だったWPFに挑戦してみてる。
Silverlightと同じXamlという素敵な言語を用いるWPF。Silverlightとの微妙な違いに戸惑いつつ、いいなあと思ったり、えーこれできないの?と思ったりの連続を楽しんでる。
そのなかで、「これいいな!」と思ったのの1つが初期フォーカスの指定をXamlでできること。
だいたい初期フォーカスなんてWindowのLoadedイベントに
Control.Focus()
で当てるもんだとばかり思っていた。
MSDNライブラリにも下記のように書いてあるし。
初期フォーカスを設定する場所は、Loaded イベント ハンドラー内にすることをお勧めします。
■フォーカスの概要
http://msdn.microsoft.com/ja-jp/library/aa969768(v=VS.100).aspx
だけども、ひょんなことから見つけたこのページ
■FocusManager.FocusedElement アタッチ
http://msdn.microsoft.com/ja-jp/library/system.windows.input.focusmanager.focusedelement(v=VS.100).aspx
に、
<StackPanel FocusManager.FocusedElement="{Binding ElementName=firstButton}"> <Button Name="firstButton" /> </StackPanel>
とズバリ書かれておりました。
別にコードビハインドが嫌いな訳じゃないけれども、初期フォーカスの場合
LoadedイベントにControl.Focus()って書くより上記のようにXamlにあった方が格段にわかりやすいと思うので、これは重宝するわ。
FocusManager.FocusedElementがSilverlightにないのが残念だけど。
(たぶん、WPF一通り弄り終わったころに「あれ、何でSilverlightにFocusManager.FocusedElementあらへんの!?とか言う予感がする。。。)