WPFは初期フォーカスをXamlで設定できるでやんの。

Silverlightを半年ほどやった後、ほぼ経験0だったWPFに挑戦してみてる。

Silverlightと同じXamlという素敵な言語を用いるWPFSilverlightとの微妙な違いに戸惑いつつ、いいなあと思ったり、えーこれできないの?と思ったりの連続を楽しんでる。

そのなかで、「これいいな!」と思ったのの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あらへんの!?とか言う予感がする。。。)