c# - How can I programatically get keyboard focus on a WPF TreeViewItem? -


i'm trying programatically set keyboard focus tree view item (under conditions). i've tried 2 methods of setting focus, both of obtain focus on treeviewitem, lose keyboard focus.

the tree view bound view model:

<treeview name="solutionsmodel" treeviewitem.selected="solutionsmodel_selected"           itemssource="{binding items, mode=oneway}" /> 

i'm trying set focus via treeviewitem selected routed event:

private void solutionsmodel_selected(object sender, routedeventargs e) {     if (solutionsmodel.selecteditem != null && solutionsmodel.selecteditem solutionviewmodel)     {         if (e.originalsource != null && e.originalsource treeviewitem)         {             focusmanager.setfocusedelement(solutionsmodel, e.originalsource treeviewitem);         }     } } 

i'm trying set focus on treeviewitem in controltemplate:

<style d:iscontrolpart="true" targettype="{x:type treeviewitem}">     <setter property="isselected" value="{binding isselected, mode=twoway}" />     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type treeviewitem}">                 <controltemplate.triggers>                     <trigger property="isselected" value="true">                         <trigger.setters>                             <setter property="focusmanager.focusedelement" value="{binding relativesource={relativesource self}}"></setter>                         </trigger.setters>                     </trigger>                     <multitrigger>                         <multitrigger.conditions>                             <condition property="isselected" value="true" />                             <condition property="isselectionactive" value="false" />                         </multitrigger.conditions>                         <!--                         <multitrigger.setters>                             <setter property="focusmanager.focusedelement" value="{binding relativesource={relativesource self}}"></setter>                         </multitrigger.setters>                         -->                     </multitrigger>                 </controltemplate.triggers>             </controltemplate>         </setter.value>     </setter> </style> 

both of these methods focus, lose keyboard focus (treeviewitem.isselectionactive false). no other element in window has focus or keyboard focus can tell (in test, have 1 read textbox on panel focus). interestingly, can keyboard focus on (commented out) multitrigger isselectionactive false, of course forces keyboard focus on treeviewitem @ times.

is there way have better chance of getting keyboard focus, , conditions keyboard focus cannot obtained?

i'd add comment if but, why not have treeview handle focus , work item abstractly using treeview.selecteditem. tree view able know item selected when typing started. if item selected treeview in focus , can pipe keyboard commands through item.


Comments

Popular posts from this blog

c# - how to write client side events functions for the combobox items -

exception - Python, pyPdf OCR error: pyPdf.utils.PdfReadError: EOF marker not found -