J'ai un élément d'arboresview en tant que tel dans un arborescence dans un arborescence qui aura une liste lié à celle-ci: Je ne peux pas comprendre comment obtenir chacun de ses enfants d'avoir un événement de double clic . P> Toute aide est appréciée. merci beaucoup. p> p>
3 Réponses :
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
...
Hein. C'était beaucoup plus facile que prévu.
private void OnItemMouseDoubleClick(object sender, MouseButtonEventArgs args)
{
if (sender is TreeViewItem)
{
if (!((TreeViewItem)sender).IsSelected)
{
return;
}
}
.... do stuff.
}
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.
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;
}
Plus simple, au lieu de votre trygetClickeditem code>, je viens d'utiliser hit.getvisualparent