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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top