ほとんどの場合、System.Windows.Controls.Control から派生したカスタム wpf コントロールがあります。
しかし、UIElement.Focus() を呼び出すコントロールで x.Focus() を呼び出すと、false が返され、コントロールがフォーカスされないことがあります。
掘り下げた後、私はそれを見つけました
var x = control as FrameworkElement;
var focusable = x.Focusable; // -> true
var enabled = x.IsEnabled; // -> true
var visible = x.IsVisible; // -> FALSE <- !!! ARRGG
コントロールがレンダリングされ、UI で完全に確認できます。Focus() への呼び出しを Dispatcher に配置しようとしましたが、コントロールで UpdateLayout() を呼び出してみましたが、どちらも役に立ちませんでした。
最もおもしろいのは、Snnop を使用して IsVisible プロパティをチェックすると、Snoop が True であると報告することです :)
コントロールの実装または他の場所で、明らかな何かを見逃していませんか?
編集 22.11.2012
これまでのコメントに感謝します。コントロールが完全にレンダリングされていない可能性があることを示唆しているコメントに対して
var x = control as FrameworkElement;
x.Dispatcher.Invoke(new Action(() =>
{
var isVisible = fe.IsVisible; // -> False
var focused = fe.Focus(); // -> False
}), DispatcherPriority.ApplicationIdle);
これも役に立ちませんでした。