OnExpanded событие для любого элемента в древовидной структуре

Я хотел бы получить событие для любого расширения элемента treeview в моем treeview.

Причина этого немного не связана с исходным вопросом: я создаю дерево, которое тесно связано с деревом файлов xml, но я разрешаю включить элемент в xml, чтобы дерево могло проходить через несколько файлов. Я хотел бы установить свойство itemssource для treeviewitems в моем древовидном представлении после расширения.


person Ian Kelling    schedule 07.09.2009    source источник


Ответы (1)


Вы можете использовать событие TreeViewItem.Expanded как прикрепленное событие:

<TreeView TreeViewItem.Expanded="TreeViewItem_Expanded"
          ItemsSource="{Binding}">
    ...
</TreeView/>

В коде программной части вы можете определить TreeViewItem, который инициировал событие, используя свойство OriginalSource:

    private void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
    {
        TreeViewItem tvi = e.OriginalSource as TreeViewItem;
        if (tvi != null)
        {
            MessageBox.Show(string.Format("TreeNode '{0}' was expanded", tvi.Header));
        }
    }
person Thomas Levesque    schedule 07.09.2009
comment
если вы имеете в виду визуальных потомков, вы можете получить их через ItemsContainerGenerator объекта TreeViewItem - person Thomas Levesque; 08.09.2009
comment
Это было так полезно, спасибо, я хотел бы получить награду за вас. Итоговое резюме: визуальные потомки, которые я хотел, еще не были созданы во время расширенного мероприятия. В событии расширения я сохранил OriginalSource, затем в произвольном методе конвертера для привязки я получил визуального потомка с ItemContainerGenerator.ContainerFromIndex (i) и обновил ItemsSource. - person Ian Kelling; 08.09.2009