wpf – 如何使用HierarchicalDataTemplate显示XML元素和属性?
发布时间:2020-12-16 07:43:51 所属栏目:百科 来源:网络整理
导读:我想在TreeView中显示任意 XML,扩展和折叠节点,显示元素名称和属性集及其值.我想我可以使用HierarchicalDataTemplate来做到这一点. 我已经看到使用HierarchicalDataTemplate显示任意XML元素和文本节点的提示,如下所示: Window.Resources HierarchicalDataTe
我想在TreeView中显示任意
XML,扩展和折叠节点,显示元素名称和属性集及其值.我想我可以使用HierarchicalDataTemplate来做到这一点.
我已经看到使用HierarchicalDataTemplate显示任意XML元素和文本节点的提示,如下所示: <Window.Resources> <HierarchicalDataTemplate x:Key="NodeTemplate"> <TextBlock x:Name="tbName" Text="?" /> <HierarchicalDataTemplate.ItemsSource> <Binding XPath="child::node()" /> </HierarchicalDataTemplate.ItemsSource> <HierarchicalDataTemplate.Triggers> <DataTrigger Binding="{Binding Path=NodeType}" Value="Text"> <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Value}"/> </DataTrigger> <DataTrigger Binding="{Binding Path=NodeType}" Value="Element"> <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Name}"/> </DataTrigger> </HierarchicalDataTemplate.Triggers> </HierarchicalDataTemplate> <XmlDataProvider x:Key="xmlDataProvider"> </XmlDataProvider> </Window.Resources> .... <TreeView Name="treeView1" ItemsSource="{Binding Source={StaticResource xmlDataProvider},XPath=*}" ItemTemplate= "{StaticResource NodeTemplate}"/> 哪个效果很好.它显示每个元素的元素名称和文本.但我的XML使用属性来传递信息.模式很复杂,我没有正式的定义,所以现在我将它视为任意XML. 最简单的文档如下所示: <c4soap name="GetVersionInfo" seq="" result="1"> <versions> <version name="Director" version="2.1.0.126418" buildtype="" builddate="Jun 1 2011" buildtime="14:52:43" /> <version name="MediaManager" version="2.1.0.126418" buildtype="" builddate="Jun 1 2011" buildtime="14:36:17" /> </versions> </c4soap> 使用上面的HierarchicalDataTemplate定义,我得到一个显示: 不是我想要的.对于每个节点,我想显示元素名称和属性集及其值. 我试过这个: <Window.Resources> <HierarchicalDataTemplate x:Key="NodeTemplate"> <WrapPanel Focusable="False"> <TextBlock x:Name="tbName" Text="?" /> <TextBlock x:Name="tbAttrs" Text="?" /> </WrapPanel> <HierarchicalDataTemplate.ItemsSource> <Binding XPath="child::node()" /> </HierarchicalDataTemplate.ItemsSource> <HierarchicalDataTemplate.Triggers> <DataTrigger Binding="{Binding Path=NodeType}" Value="Text"> <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Value}"/> </DataTrigger> <DataTrigger Binding="{Binding Path=NodeType}" Value="Element"> <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Name}"/> <Setter TargetName="tbAttrs" Property="Text" Value="{Binding Path=Attributes}"/> </DataTrigger> </HierarchicalDataTemplate.Triggers> </HierarchicalDataTemplate> <XmlDataProvider x:Key="xmlDataProvider"> </XmlDataProvider> </Window.Resources> ……让我有点亲近,但是 除了元素名称之外,我怎样才能简单地显示所有实际的属性名称和值?
我在模板中添加了一个ItemsControl,如下所示:
<Window.Resources> <SolidColorBrush x:Key="xmlValueBrush" Color="Blue" /> <SolidColorBrush x:Key="xmAttributeBrush" Color="Red" /> <SolidColorBrush x:Key="xmlTagBrush" Color="DarkMagenta" /> <SolidColorBrush x:Key="xmlMarkBrush" Color="Blue" /> <DataTemplate x:Key="attributeTemplate"> <StackPanel Orientation="Horizontal" Margin="3,0" HorizontalAlignment="Center"> <TextBlock Text="{Binding Path=Name}" Foreground="{StaticResource xmAttributeBrush}"/> <TextBlock Text="="" Foreground="{StaticResource xmlMarkBrush}"/> <TextBlock Text="{Binding Path=Value}" Foreground="{StaticResource xmlValueBrush}"/> <TextBlock Text=""" Foreground="{StaticResource xmlMarkBrush}"/> </StackPanel> </DataTemplate> <HierarchicalDataTemplate x:Key="nodeTemplate"> <StackPanel Orientation="Horizontal" Focusable="False"> <TextBlock x:Name="tbName" Text="?" /> <ItemsControl ItemTemplate="{StaticResource attributeTemplate}" ItemsSource="{Binding Path=Attributes}" HorizontalAlignment="Center"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> </StackPanel> <HierarchicalDataTemplate.ItemsSource> <Binding XPath="child::node()" /> </HierarchicalDataTemplate.ItemsSource> <HierarchicalDataTemplate.Triggers> <DataTrigger Binding="{Binding Path=NodeType}" Value="Text"> <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Value}"/> </DataTrigger> <DataTrigger Binding="{Binding Path=NodeType}" Value="Element"> <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Name}"/> </DataTrigger> </HierarchicalDataTemplate.Triggers> </HierarchicalDataTemplate> <XmlDataProvider x:Key="xmlDataProvider"> </XmlDataProvider> </Window.Resources> 现在它显示元素名称和属性集及其值,如下所示: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 带有rails-api和Angular JS的SPA
- 快车道:流,重构,TDD与设计模式
- react-native – 如何滚动到底部在React Native ListView
- xstream fromxml时,处理NumberFormatException及忽略多余x
- 通用Objective-C描述方法来打印ivar值
- 如何通过AJAX将参数传递给CFC?
- cocos2d-x 指南
- sqlite关于The database disk image is malformed问题的解决
- UIActivityIndicator的创建(React Native)
- 正则表达式判定保留2位小数的实现代码