起初,我認爲你不能滿足那些XML模式的要求。然而,想出來的一個測試項目後,似乎這一切工作得很好:
你需要使用一個XmlDataProvider
訪問XML文件:
<XmlDataProvider Source="/WpfApplication2;component/Xml/TestXMLFile.xml"
XPath="root/key" />
您還需要爲root
節點添加到XML,使其合法:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<key type='Configuration'>
<id field='name' value='Some value'/>
</key>
<key type='Container'>
<id field='name' value='MyName'/>
<key type='Container'>
<id field='name' value='Data12345'/>
<key type='Container'>
<id field='name' value='Data987655'/>
<key type='Circuit'>
<id field='name' value='Data63236723'/>
</key>
</key>
</key>
</key>
</root>
然後你需要添加TreeView
:
<TreeView ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}" />
然後終於,添加HierarchicalDataTemplate
到您的Resources
部分:
<HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=key}" DataType="key">
<StackPanel Orientation="Horizontal" Margin="0,2">
<Image>
<Image.Style>
<Style>
<Setter Property="Image.Source" Value="Images/Default.png" />
<Style.Triggers>
<DataTrigger Binding="{Binding [email protected]}" Value="Container">
<Setter Property="Image.Source" Value="Images/Container.png" />
</DataTrigger>
<DataTrigger Binding="{Binding [email protected]}" Value="Configuration">
<Setter Property="Image.Source" Value="Images/Configuration.png" />
</DataTrigger>
<DataTrigger Binding="{Binding [email protected]}" Value="Circuit">
<Setter Property="Image.Source" Value="Images/Circuit.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock Text="{Binding XPath=id/@value}" Margin="5,0" />
</StackPanel>
</HierarchicalDataTemplate>
我真的不意味着做整個事情給你,所以我將離開你來調整它符合你的喜好。我相信你會從這裏繼續。
感謝您提供非常精緻的答案,我不知道非常整齊的風格觸發器! 「綁定XPath = id/@值」真的解決了我的問題! – StefanE