WPF Double Cliquez sur TreeViewItem Noeud enfant
-
28-09-2019 - |
Question
J'ai un TreeView article en tant que telle dans un TreeView qui aura une liste liée à elle:
<TreeViewItem Name="tviOffline" Foreground="Red" FontWeight="Bold"
Header="Offline">
<TreeViewItem.ItemTemplate>
<DataTemplate DataType="{x:Type local:Buddy}">
<StackPanel>
<TextBlock Text="{Binding Nick}" FontSize="10" Foreground="#8CFFD528" />
</StackPanel>
</DataTemplate>
</TreeViewItem.ItemTemplate>
</TreeViewItem>
Je ne peux pas comprendre comment obtenir chacun de ses Childs d'avoir un événement double clic.
toute aide est appréciée. merci beaucoup.
La solution
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
...
Autres conseils
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
...
Et puis, le gestionnaire doit être écrit comme suit afin d'éviter le double-clic de tirer sur TreeViewItems mères successives:
private void OnItemMouseDoubleClick(object sender, MouseButtonEventArgs args)
{
if (sender is TreeViewItem)
{
if (!((TreeViewItem)sender).IsSelected)
{
return;
}
}
.... do stuff.
}
Merci à Aurelien Ribon pour obtenir 90% du chemin. Le problème de la double-clic semble être bien connu dans d'autres messages sur Stack Exchange. Il suffit de consolider les deux solutions en une seule réponse.
Ceci est la seule façon que je réussi à l'obtenir au travail 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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow