11
votes

WPF Double-cliquez sur TreeViewItem Child Node

J'ai un élément d'arboresview en tant que tel dans un arborescence dans un arborescence qui aura une liste lié à celle-ci: xxx

Je ne peux pas comprendre comment obtenir chacun de ses enfants d'avoir un événement de double clic .

Toute aide est appréciée. merci beaucoup.


0 commentaires

3 Réponses :


27
votes
<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
        ...

1 commentaires

Hein. C'était beaucoup plus facile que prévu.



17
votes
   private void OnItemMouseDoubleClick(object sender, MouseButtonEventArgs args)
    {
        if (sender is TreeViewItem)
        {
            if (!((TreeViewItem)sender).IsSelected)
            {
                return;
            }
        }

        .... do stuff.

    }

1 commentaires

Merci - maintenant je sais qu'il n'y a pas besoin de faire la recherche à la hausse dans l'arbre visuel pour rechercher un TreeItem, si votre événement est défini sur l'élémentContainerStyle.



4
votes

C'est la seule façon dont j'ai réussi à le faire fonctionner pour tous les cas:

    void MyTreeView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var clickedItem = TryGetClickedItem(myTreeView, e);
        if (clickedItem == null)
            return;

        e.Handled = true; // to cancel expanded/collapsed toggle
        DoStuff(clickedItem);
    }

    TreeViewItem TryGetClickedItem(TreeView treeView, MouseButtonEventArgs e)
    {
        var hit = e.OriginalSource as DependencyObject;
        while (hit != null && !(hit is TreeViewItem))
            hit = VisualTreeHelper.GetParent(hit);

        return hit as TreeViewItem;
    }


1 commentaires

Plus simple, au lieu de votre trygetClickeditem , je viens d'utiliser hit.getvisualparent () .