0

使用下面的以下 XML,我想将 ahierarchicaldatatemplate与 WPF 树视图一起使用。

根据类型中的值,我打算使用旁边带有名称的不同图像,然后从 id 标签的值中获取名称。

    <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>

我已经尝试了一些简单的示例,但没有一个显示如何使用带有属性的分层数据模板以及如何从属性中获取带有绑定的文本。

如果任何人都可以展示这个 XML 与 TreeView 一起使用的分层数据模板应该是什么样子,那就太好了。

4

1 回答 1

2

起初,我认为您无法使用该 XML 模式来满足这些要求。然而,在一个测试项目中尝试之后,似乎一切都很好:

在此处输入图像描述

您需要使用 anXmlDataProvider来访问 XML 文件:

<XmlDataProvider Source="/WpfApplication2;component/Xml/TestXMLFile.xml" 
    XPath="root/key" />

您还需要向rootXML 添加一个节点以使其合法:

<?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 XPath=@type}" Value="Container">
                            <Setter Property="Image.Source" Value="Images/Container.png" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding XPath=@type}" Value="Configuration">
                            <Setter Property="Image.Source" Value="Images/Configuration.png" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding XPath=@type}" 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>

我并不是真的要为你做所有的事情,所以我会让你根据自己的喜好进行调整。我相信你从这里会没事的。

于 2014-01-09T14:26:44.397 回答