2009-07-20 2 views
0

これは難しい質問のように聞こえます。私は黙示的に聞かせてください...WPFでは、TreeViewItemを選択すると、別のコントロールにフォーカスを当てますが、TreeViewItemの選択を完了するにはどうすればよいですか?

私はtreeViewを持っています。 treeViewItemをクリック/選択すると、別のTextBoxをフォーカスしたいと思います。

問題は、テキストボックスをフォーカスするコードを追加すると、TreeViewが選択されたノードを表示しないように見えるということです(つまり、treeItemが選択されていない(または少なくとも目立たない))。

ここ

私のイベントは、コードを処理している...

private void trvTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
    { 
     grpEditTreeItem.DataContext = (TreeItemDefinition)e.NewValue; 


     txtToken.SelectAll(); 
     txtToken.Focus(); 
    } 

任意のアイデアは?

+0

ください... –

答えて

1

選択されたものとフォーカスされたものを区別します。一度に1つ以上のコントロールにフォーカスすることはできません。

ツリービューはになります。フォーカスが失われた場合は、を選択してください。

編集:
問題を確認して、SelectedItemChanged()内の別のコントロールにフォーカスを設定すると、選択をキャンセルします。

Focus()コールを延期する必要があります。大雑把な(ただし理想的ではない)ソリューションは、txtToken.Focus()をtrvTree_MouseUp()イベントハンドラに配置することです。しかし、それはまたNodeを展開するときにFocusを離れてしまいます。

したがって、おそらく、SelectedItemChanged()から起動されたワンショットタイマーを使用する必要があります。

+0

良い点を詳しく説明し、私はあなたがまた、ディスパッチャのフォーカスコールをキューイングすることができます – willem

+0

...明確ます。最近のデフォルトでは、現在の実行フレームに干渉しないように、ほとんどの場合これをデフォルトとして使用しています。これは、指定された状況 – flq

0
this.Dispatcher.BeginInvoke((Action)delegate 
{ 
    txtToken.SelectAll(); 
    txtToken.Focus(); 
}); 
関連する問題