2009-06-16 6 views
2

J'ai remarqué cela sur une application sur laquelle je travaille en ce moment, j'ai donc créé une application de test simple à démontrer. Voici ma fenêtre et le gestionnaire d'événements pour les éléments treeview. Si vous développez les nœuds parents «un» ou «deux» et que vous cliquez sur l'un des enfants, l'enfant sélectionné n'apparaît pas comme sélectionné après l'appel de la méthode Focus() dans la zone de texte. Au lieu de cela, la sélection apparaît au nœud parent. Est-ce que quelqu'un a une idée de comment surmonter cela, et la sélection reste-t-elle avec le nœud enfant sélectionné? Merci.L'élément Treeview perd la sélection lorsque la mise au point est perdue

<Window 
x:Class="DockingSample.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" 
WindowState="Maximized" 
> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="300" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <TreeView Margin="6"> 
     <TreeViewItem Header="One"> 
      <TreeViewItem Header="One" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Two" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Three" Selected="TreeViewItem_Selected" /> 
     </TreeViewItem> 
     <TreeViewItem Header="Two"> 
      <TreeViewItem Header="One" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Two" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Three" Selected="TreeViewItem_Selected" /> 
     </TreeViewItem> 
    </TreeView> 

    <TextBox Grid.Column="1" x:Name="textbox" /> 
</Grid> 

private void TreeViewItem_Selected(object sender, RoutedEventArgs e) 
    { 
     textbox.Focus(); 
    } 

Avec la fenêtre ci-dessus et l'événement "Sélectionné" Handl

+0

Juste un petit commentaire de refactoring, au lieu de placer l'événement Selected dans chaque élément treeview, vous pouvez: ; – apandit

+0

Et il semble que le double-clic sur l'élément enfant fonctionne correctement mais pas en cliquant simplement ...: S – apandit

+0

Oui, je le sais, mais dans ce cas, je ne veux pas que les nœuds parents provoquent l'action, seulement les enfants. Je suppose que le double-clic «fonctionne» parce que le deuxième clic recapture le focus sur l'arborescence, et même si le parent est en surbrillance, l'enfant est probablement toujours marqué comme sélectionné afin qu'il ne soit pas sélectionné à nouveau. La question demeure cependant: pourquoi la surbrillance passe-t-elle au parent lorsque l'arborescence perd son focus? –

Répondre

3

Donnez un peu de temps pour TreeView de terminer leurs activités en faisant ceci:

Dispatcher.BeginInvoke (DispatcherPriority.Input, nouvelle Action (() => textbox.Focus()));

+0

a travaillé pour moi. Merci! – Curtis

-1

Définissez TreeView.HideSelection sur false.

+0

Question sur WPF pas Winforms – VeV

Questions connexes