В WPF, когато избирам TreeViewItem, как да фокусирам върху друга контрола, но все пак да завърша моя избор на TreeViewItem?

Това звучи като труден въпрос... позволете ми да обясня...

Имам treeView. Когато се щракне/избере treeViewItem, бих искал друго TextBox да бъде фокусирано.

Проблемът е, че веднага щом добавя код към Focus the Textbox, изглежда, че TreeView вече не показва избрания си възел (т.е. treeItem изобщо не е избран (или поне не се вижда)).

Ето моят код за обработка на събития...

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


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

Някакви идеи?


person willem    schedule 20.07.2009    source източник
comment
Моля, предоставете повече подробности...   -  person Prashant Cholachagudda    schedule 20.07.2009


Отговори (1)


Правете разлика между избрани и фокусирани. Не можете да имате повече от 1 фокусирана контрола в даден момент.

Това, което искате, е вашият TreeView да показва избрания възел, когато е загубил фокуса.

Редактиране:
Но мога да потвърдя проблема, настройването на фокуса върху друга контрола в SelectedItemChanged() ще отмени селекцията.

Така че това, от което се нуждаете, е нещо, което да отложи извикването на Focus(). Грубо (но не идеално) решение е да поставите txtToken.Focus() в манипулатор на събития trvTree_MouseUp(). Но това също ще отнеме фокуса при разширяване на възел например.

Така че вероятно ще трябва да използвате еднократен таймер, задействан от SelectedItemChanged().

person Henk Holterman    schedule 20.07.2009
comment
Можете също така да поставите фокусното повикване на диспечера. Почти използвам това като стандартно в наши дни, тъй като по този начин не пречи на текущата рамка за изпълнение и изглежда, че 90% от времето прави това, което искате в дадена ситуация - person flq; 15.02.2013