Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

Get TreeViewItem for TreeView logical element

$
0
0

My tree view seems like this

<TreeView x:Name="ArticlesTreeView"Grid.Column="0"AllowDrop="True"><TreeView.Resources><HierarchicalDataTemplateDataType="{x:Type structure:NewsPaperDocument}"ItemsSource="{Binding Children}"><TextBlockText="{Binding Name}"Tag="{Binding Object}"FontWeight="Bold"/></HierarchicalDataTemplate><HierarchicalDataTemplateDataType="{x:Type structure:NewsPaperPage}"ItemsSource="{Binding Children}"><TextBlockText="{Binding Name}"Tag="{Binding Object}"Foreground="#00a300"/></HierarchicalDataTemplate><HierarchicalDataTemplateDataType="{x:Type structure:NewsPaperTitle}"ItemsSource="{Binding Children}"><TextBlockText="{Binding Name}"Tag="{Binding Object}"Foreground="#da532c"/></HierarchicalDataTemplate><DataTemplateDataType="{x:Type structure:NewsPaperBlock}"><TextBlockText="{Binding Name}"Tag="{Binding Object}"Foreground="#2b5797"/></DataTemplate></TreeView.Resources></TreeView>

In ArticlesTreeView.SelectedItem stores instance of classes NewsPaperDocument, NewsPaperPage, etc. How can I get TreeViewItem associated withSelectedItem? I try to use VisualTreeHelper.GetParent(elem);, butSelectedItem doesn't has type DependencyObject

UPD1 Add simple sample, that demonstrate problem. item inArticlesTreeView_SelectedItemChanged always null

XAML

<Window x:Class="TestTree.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:testTree="clr-namespace:TestTree"Title="MainWindow"Height="350"Width="525"><Grid><TreeView x:Name="ArticlesTreeView"Grid.Column="0"AllowDrop="True"SelectedItemChanged="ArticlesTreeView_SelectedItemChanged"><TreeView.Resources><HierarchicalDataTemplateDataType="{x:Type testTree:A}"ItemsSource="{Binding Children}"><TextBlockText="{Binding Name}"FontWeight="Bold"/></HierarchicalDataTemplate><HierarchicalDataTemplateDataType="{x:Type testTree:B}"ItemsSource="{Binding Children}"><TextBlockText="{Binding Name}"Foreground="#00a300"/></HierarchicalDataTemplate><DataTemplateDataType="{x:Type testTree:C}"><TextBlockText="{Binding Name}"Foreground="#2b5797"/></DataTemplate></TreeView.Resources></TreeView></Grid>

CS

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;

namespace TestTree{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>publicpartialclassMainWindow:Window{publicMainWindow(){InitializeComponent();var a =new A{Name="a",Children=newList<B>{new B{Name="b1",Children=newList<C>{new C{Name="c1"},new C{Name="c2"},new C{Name="c3"}},},new B{Name="b2",Children=newList<C>{new C{Name="c1"},new C{Name="c2"},new C{Name="c3"}},},new B{Name="b3",Children=newList<C>{new C{Name="c1"},new C{Name="c2"},new C{Name="c3"}},}}};ArticlesTreeView.ItemsSource=newList<A>{ a };}privatevoidArticlesTreeView_SelectedItemChanged(object sender,RoutedPropertyChangedEventArgs<object> e){ItemContainerGenerator gen =ArticlesTreeView.ItemContainerGenerator;var item = gen.ContainerFromItem(ArticlesTreeView.SelectedItem);}}internalclass A{publicstringName{set; get;}publicList<B>Children{set; get;}}internalclass B{publicstringName{set; get;}publicList<C>Children{set; get;}}internalclass C{publicstringName{set; get;}}}

Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>