I have a TreeView that is built on an XML file and contains a text and an image in each TreeViewItem. Also, I have a TextBlock and an Image, that I want to bound to the selected TreeViewItem.
How can I do this?
Here is my XAML:
<Window.Resources> <HierarchicalDataTemplate DataType='Node' ItemsSource ='{Binding XPath=ChildNode}'> <StackPanel Orientation='Horizontal'> <Image Source='{Binding XPath=@Image}'/> <TextBlock Text='{Binding XPath=@Name}' /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplate DataType='ChildNode' ItemsSource ='{Binding XPath=GrandchildNode}'> <StackPanel Orientation='Horizontal'> <Image Source='{Binding XPath=@Image}' /> <TextBlock Text='{Binding XPath=@Name}' /> </StackPanel> </HierarchicalDataTemplate> <DataTemplate DataType='GrandchildNode'> <StackPanel Orientation='Horizontal'> <Image Source='{Binding XPath=@Image}' /> <TextBlock Text='{Binding XPath=@Name}' /> </StackPanel> </DataTemplate> <XmlDataProvider x:Key='xmlNodeList' Source='XMLFile1.xml' XPath='Root'/></Window.Resources><StackPanel> <TreeView Name='treeView1' ItemsSource='{Binding Source={StaticResource xmlNodeList}, XPath=Node}' /> <TextBlock /> <Image /></StackPanel>
And here is an XML data:
<Root> <Node Name='AAA' Image='images/1.ico' /> <Node Name='BBB' Image='images/2.ico'> <ChildNode Name='bbb 1' Image='images/3.ico'> <GrandchildNode Name='b 1.1' Image='images/4.ico'/> <GrandchildNode Name='b 1.2' Image='images/5.ico'/> <GrandchildNode Name='b 1.3' Image='images/6.ico'/> </ChildNode> <ChildNode Name='bbb 2' Image='images/7.ico'/> <ChildNode Name='bbb 3' Image='images/8.ico'> <GrandchildNode Name='b 3.1' Image='images/9.ico'/> <GrandchildNode Name='b 3.2' Image='images/10.ico'/> </ChildNode> <ChildNode Name='bbb 4' Image='images/11.ico'/> </Node> <Node Name='CCC' Image='images/12.ico'> <ChildNode Name='ccc 1' Image='images/13.ico'> <GrandchildNode Name='c 1.1' Image='images/14.ico'/> <GrandchildNode Name='c 2.2' Image='images/15.ico'/> </ChildNode> </Node></Root>
If you stick you TextBlock & Image inside another StackPanel to make it a bit easier you can do: