Это - XML-файл
<Root>
<RootNode name="CurrentDbName" value="DeltaTest Backup" DesiPath="E:\BuildBackups">
<ChildNode name="Application" value="App">
<LeafNode name="Source" value="Source" SourcePath="E:\Alertv2" />
<LeafNode name="Publish" value="Publish" SourcePath="C:\Alert_Source" />
</ChildNode>
<ChildNode name="Database" value="DB">
<LeafNode name="Dev" value="Dev" SourcePath="C:\Kiran3" />
<LeafNode name="Build" value="Build" SourcePath="C:\Kiran4" />
</ChildNode>
</RootNode> </Root>
От этого я хочу создать treeview в WPF, и похож
-Root
--DeltaTestBaclup
---App
----Source
----Publish
---Db
----Dev
----Build
Поэтому помогите мне создать этот treeview.
Вот способ сделать это программно. Это основано на решении этого сайта
public YourWindow()
{
InitializeComponent();
BuildTree(treeView, XDocument.Load(System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), @"testxml.xml")));
}
private void BuildTree(TreeView treeView, XDocument doc)
{
TreeViewItem treeNode = new TreeViewItem
{
//Should be Root
Header = doc.Root.Name.LocalName,
IsExpanded = true
};
treeView.Items.Add(treeNode);
BuildNodes(treeNode, doc.Root);
}
private void BuildNodes(TreeViewItem treeNode, XElement element)
{
foreach (XNode child in element.Nodes())
{
switch (child.NodeType)
{
case XmlNodeType.Element:
XElement childElement = child as XElement;
TreeViewItem childTreeNode = new TreeViewItem
{
//Get First attribute where it is equal to value
Header = childElement.Attributes().First(s => s.Name == "value").Value ,
//Automatically expand elements
IsExpanded = true
};
treeNode.Items.Add(childTreeNode);
BuildNodes(childTreeNode, childElement);
break;
case XmlNodeType.Text:
XText childText = child as XText;
treeNode.Items.Add(new TreeViewItem { Header = childText.Value, });
break;
}
}
}
Этот код построит дерево в соответствии с вашими требованиями. Это XAML
<Grid>
<TreeView Margin="20" Background="LightGray" x:Name="treeView" />
</Grid>
Вы можете прочитать об этом здесь , пример с этого сайта:
<TreeView Margin="10,10,0,13" Name="TreeView1" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="194" Height="200">
<TreeViewItem Header="Cold Drinks">
<TreeViewItem Header="Coke"></TreeViewItem>
<TreeViewItem Header="Pepsi"></TreeViewItem>
<TreeViewItem Header="Orange Juice"></TreeViewItem>
<TreeViewItem Header="Milk"></TreeViewItem>
<TreeViewItem Header="Iced Tea"></TreeViewItem>
<TreeViewItem Header="Mango Shake"></TreeViewItem>
</TreeViewItem>
</TreeView>
Это приведет к следующему
(источник: c-sharpcorner.com )
Итак, в вашем случае вам нужно добавить еще несколько TreeViewItems и немного их вложить, поиграйте с приведенным выше кодом, чтобы получить желаемый результат!
Добро пожаловать в stackoverflow, если бы вы могли опубликовать образец xml - это помогло бы визуализировать, над чем вы работаете. Я думаю, вам нужно использовать 1 или несколько HierarchicalDataTemplate
.
Предполагая, что XML-файл с именем data.xml:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<item>
<DeltaTestBaclup>aaa</DeltaTestBaclup>
<App>bbb</App>
<Source>ccc</Source>
<Publish>ddd</Publish>
</item>
<item>
<DeltaTestBaclup>aaa</DeltaTestBaclup>
<App>bbb</App>
<Source>ccc</Source>
<Publish>ddd</Publish>
</item>
</root>
Вы можете использовать xaml примерно так:
<Grid>
<Grid.DataContext>
<XmlDataProvider Source="data.xml"></XmlDataProvider>
</Grid.DataContext>
<Grid.Resources>
<HierarchicalDataTemplate x:Key="ItemTemplate" DataType="item">
<TextBlock>
<TextBlock Text="{Binding XPath=DeltaTestBaclup}" />
<LineBreak></LineBreak>
<TextBlock Text="{Binding XPath=App}" />
<LineBreak></LineBreak>
<TextBlock Text="{Binding XPath=Source}" />
<LineBreak></LineBreak>
<TextBlock Text="{Binding XPath=Publish}" />
</TextBlock>
</HierarchicalDataTemplate>
</Grid.Resources>
<TreeView Name="treeView"
ItemsSource="{Binding Path=.,XPath=/root/item}"
ItemTemplate="{StaticResource ItemTemplate}">
</TreeView>
</Grid>