2009-09-08 34 views
5

PreviewTextInputハンドラから新しいコントロールが作成され、フォーカスが設定されています。しかし、新しいコントロールでFocus()を呼び出した後でも、カーソルはまだ古いテキストボックスにあります。 ハンドラUserControl_PreviewTextInputは、このテキストボックスを含むUserControlに登録されます。 WPF:フォーカスを設定できません

private void UserControl_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
      CodeLineControl el = new CodeLineControl(); 
      container.Children.Insert(idx+1, el); 
      el.innerTextBox.Focus(); 
} 

CodeLineControl

がそのように定義されている(簡体字):
<UserControl ..> 
    <DockPanel Name="codeline" Background="AntiqueWhite" >   
     <TextBox Name="innerTextBox"/>  
    </DockPanel> 
</UserControl> 

はIAMの約AWREないことをフォーカス()上のいくつかの制限はありますか? PreviewTextInputハンドラからTextBoxからFocus()を移動させることはできませんか?新しく作成された要素に焦点を当てることはできませんか?タイマーを作成する

public static void BackgroundFocus(this UIElement el) 
    { 
     Action a =() => el.Focus(); 
     el.Dispatcher.BeginInvoke(DispatcherPriority.Background, a); 
    } 

必要がありません:

答えて

3

遅延

+0

これはなぜ必要ですか?私はguiに新しいコントロールを追加したので、可視でフォーカス可能にする必要がありました。 – codymanix

+0

私はそれが別のスレッドで非同期的にレンダリングされると思うし、それが完了するまでそれに集中することはできません。または、新しいコントロールが追加された後、WPFによってフォーカス自体が変更される可能性があります。おそらく、LostFocusイベントはある時点で起動されますか?どのコントロールがフォーカスを取得しているか/フォーカスを失っているかを確認するログファイルを作成できます。 http://www.julmar.com/blog/mark/PermaLink,guid,6e4769e5-a0b3-47b2-a142-6dfefd0c028e.aspx –

18

この後にそのテキストボックスにフォーカスを呼び出しDispatcherTimerを作成しますが、私はフォーカスするのではなく、使用拡張メソッドです。

+2

素晴らしいソリューション! +1 – Dabblernl

+0

私はあなたのコードを盗みます!私は['FocusLikeChuckNorris'](http://www.chucknorrisfacts.com)に改名します! (+1) –

関連する問題