WPF TreeViewItem
-
21-09-2019 - |
Pergunta
Estou criando um TreeView
Usando o seguinte método loop através de um documento XML.
No entanto, quando qualquer TreeViewItem
é selecionado todos os nós na hierarquia estão recebendo o evento gatilhos em vez de apenas os selecionados TreeViewItem
.
Por exemplo, digamos que selecionamos o neto de um nó. Todos os nós, incluindo neto, filho, pai, estão desencadeando o mesmo evento.
Em outras palavras, esperamos que apenas o neto desencadeie o evento associado, enquanto o evento deve ser chamado apenas uma vez, mas acaba sendo chamado 3 vezes para todos os nós da hierarquia do item selecionado.
Aqui está o código:
TreeViewItem getTreeViewItemWithHeader(XmlNode node)
{
TreeViewItem tvi = new TreeViewItem();
tvi.Header = node.Name;//hdr;
tvi.Tag = node.Attributes["Tag"].Value;
tvi.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(tvi_PreviewMouseLeftButtonDown);
tvi.Selected += new RoutedEventHandler(tvi_Selected);
return tvi;
}
Por favor me avise se você tiver alguma sugestão, obrigado
N
Solução
Isso está funcionando corretamente. o PreviewMouseLeftButtonDown
Evento é um evento roteado (neste caso, a estratégia é o tunelamento). Isso significa que a raiz da árvore visual recebe o evento primeiro, e ele desce até atingir o controle que originalmente acionou o evento. o MouseLeftButtonDown
e Selected
Os eventos também são roteados, mas sua estratégia está borbulhando - isso significa que o evento aumenta a árvore visual, começando com o controle que desencadeou o evento.
Se você deseja que um evento roteado não continue sendo enviado, defina o Handled
propriedade do RoutedEventArgs
passou para true
.