using UnityEngine;
using System.Collections; public class Item
{ public string Id; public string Name; public string ParentId; public Item(string name, string id, string parentid)
{
this.Name = name;
this.Id = id;
this.ParentId = parentid;
} }
using UnityEngine;
using System.Collections;
using System.Collections.Generic; public class NodeMessage : MonoBehaviour
{ public string Tag; public List<NodeMessage> NodeList; }
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Xml; public class TreeNode : MonoBehaviour
{
public GameObject Panel;
public List<Item> ItemList;
dfScrollPanel scrollpanel; void Start()
{
scrollpanel = this.GetComponent<dfScrollPanel>();
ReadXML();
AddNodes();
} void AddNodes()
{
for (int i = ; i < ItemList.Count; i++)
{
if (ItemList[i].ParentId == "")
{
var treeNode = scrollpanel.AddPrefab(Panel);
var newNode = treeNode.GetComponent<NodeMessage>();
newNode.Tag = ItemList[i].Id;
treeNode.Find("Sprite").GetComponent<dfSprite>().SpriteName = "ArrowNormal";
treeNode.Find("Node").GetComponent<dfButton>().Text = ItemList[i].Name;
AddChildNodes(newNode);
}
}
foreach (Transform child in scrollpanel.transform)
{
var TreeNode = child.GetComponent<NodeMessage>();
if (TreeNode.NodeList.Count == )
{
dfPanel NodePanel = child.GetComponent<dfPanel>();
NodePanel.Find("Sprite").GetComponent<dfSprite>().IsVisible = false;
}
}
} public void AddChildNodes(NodeMessage message)
{
for (int i = ; i < ItemList.Count; i++)
{
if (ItemList[i].ParentId == message.Tag)
{
var treeNode = scrollpanel.AddPrefab(Panel);
var newNode = treeNode.GetComponent<NodeMessage>();
newNode.Tag = ItemList[i].Id;
treeNode.Find("Node").GetComponent<dfButton>().Text = ItemList[i].Name;
treeNode.Find("Sprite").GetComponent<dfSprite>().SpriteName = "ArrowNormal";
var parentTransform = message.GetComponent<dfPanel>().Find("Panel").transform;
treeNode.Find("Panel").transform.localPosition = new Vector2(parentTransform.localPosition.x + 0.1f, );
message.NodeList.Add(newNode);
AddChildNodes(newNode);
treeNode.IsVisible = false;
}
}
} public void tubiaoOnClick(bool isShow, string tag, List<NodeMessage> nodelist)
{
for (int i = ; i < ItemList.Count; i++)
{
if (ItemList[i].Id == tag)
{
SelectNodeList(isShow, nodelist);
}
}
} void SelectNodeList(bool isShow, List<NodeMessage> nodelist)
{
for (int j = ; j < nodelist.Count; j++)
{
dfPanel NodePanel = nodelist[j].GetComponent<dfPanel>();
var node = NodePanel.GetComponent<NodeMessage>();
if (isShow == true)
{
NodePanel.IsVisible = true;
}
else
{
tubiaoOnClick(isShow, node.Tag, node.NodeList);
NodePanel.IsVisible = false;
NodePanel.Find("Sprite").GetComponent<dfSprite>().SpriteName = "ArrowNormal";
NodePanel.Find("tubiao").GetComponent<TuBiao>().isShow = false; }
}
} void ReadXML()
{
XmlDocument doc = new XmlDocument();
doc.Load(Application.dataPath + @"\TreeView.xml");
XmlElement rootElem = doc.DocumentElement;
XmlNodeList itemlist = rootElem.GetElementsByTagName("node"); ItemList = new List<Item>();
foreach (XmlNode xn1 in itemlist)
{
XmlElement xe = (XmlElement)xn1;
XmlNodeList xml = xe.ChildNodes;
Item item = new Item(xe.GetAttribute("name").ToString(), xml.Item().InnerText, xml.Item().InnerText);
ItemList.Add(item);
} } }
using UnityEngine;
using System.Collections; public class TuBiao : MonoBehaviour
{ private TreeNode TreeNode;
dfSprite Sprite;
NodeMessage Message;
public bool isShow = false; void Start()
{
Sprite = this.transform.FindChild("Sprite").GetComponent<dfSprite>();
TreeNode = this.transform.parent.parent.parent.GetComponent<TreeNode>();
Message = this.transform.parent.parent.GetComponent<NodeMessage>();
} void OnClick()
{
if (Sprite.SpriteName == "ArrowNormal")
Sprite.SpriteName = "ArrowUnfold";
else
Sprite.SpriteName = "ArrowNormal";
isShow = !isShow;
TreeNode.tubiaoOnClick(isShow, Message.Tag, Message.NodeList); } }

XML如下:

<?xml version="1.0" encoding="utf-8"?>
<projects>
<node name="Node1">
<id></id>
<parentid></parentid>
</node>
<node name="Node1 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node1 - 1 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node1 - 1 - 2">
<id></id>
<parentid></parentid>
</node>
<node name="Node1 - 2">
<id></id>
<parentid></parentid>
</node>
<node name="Node1 - 2 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node1 - 2 - 2">
<id></id>
<parentid></parentid>
</node>
<node name="Node2">
<id></id>
<parentid></parentid>
</node>
<node name="Node2 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node2 - 2">
<id></id>
<parentid></parentid>
</node>
<node name="Node2 - 2 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node2 - 2 - 2">
<id></id>
<parentid></parentid>
</node>
<node name="Node2 - 3">
<id></id>
<parentid></parentid>
</node>
<node name="Node3">
<id></id>
<parentid></parentid>
</node>
<node name="Node3 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node3 - 1 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node3 - 1 - 2">
<id></id>
<parentid></parentid>
</node>
<node name="Node3 - 2">
<id></id>
<parentid></parentid>
</node>
<node name="Node3 - 2 - 1">
<id></id>
<parentid></parentid>
</node>
<node name="Node3 - 2 - 2">
<id></id>
<parentid></parentid>
</node>
</projects>

Unity基于DFGUI的TreeView设计的更多相关文章

  1. SOA实践之基于服务总线的设计

    在上文中,主要介绍了SOA的概念,什么叫做“服务”,“服务”应该具备哪些特性.本篇中,我将介绍SOA的一种很常见的设计实践--基于服务总线的设计. 基于服务总线的设计 基于总线的设计,借鉴了计算机内部 ...

  2. 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)

    郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...

  3. 基于MATLAB2016b图形化设计自动生成Verilog语言的积分模块及其应用

    在电力电子变流器设备中,常常需要计算发电量,由于电力电子变流器设备一般是高频变流设备,所以发电量的计算几乎时实时功率的积分,此时就会用到一个积分模块.发电量计算的公式如下:Q=∫P. FPGA由于其并 ...

  4. 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集【转】

    转自:http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html 一直想把USB摄像头接到Zedboard上,搭建 ...

  5. 基于FPGA的DDS设计(一)

    最近在学习基于FPGA的DDS设计,借此机会把学习过程记录下来,当作自己的学习笔记也希望能够帮助到学习DDS的小伙伴. DDS(Direct Digital Synthesizer)直接数字合成器,这 ...

  6. atitit.基于虚拟机的启动器设计 --java 启动器 java生成exe

    atitit.基于虚拟机的启动器设计 --java 启动器   java生成exe exe4j   vs  nativej 1. step1读取配置文件 1 1.1. regular mode   . ...

  7. 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)

    AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...

  8. unity 基于scrollRect实现翻页显示

    unity 基于scrollRect实现翻页显示,并定为到某一页,而不是某一页的中间方法(第二个脚本采用实际位置计算,并在update里实现平滑过渡): 组场景时,经常需要获取鼠标(或者点击)开始结束 ...

  9. 基于libuv的TCP设计(三)

      基于libuv的TCP设计(一) 基于libuv的TCP设计(二)   一.第二版本的libuv_tcp已经基本可以使用.不会出错与崩溃现象,支持几百路客户端同时连接.可是有一缺陷就占用CPU非常 ...

随机推荐

  1. ssh 安装笔记

    debian 6.0 的一台32位机器,aptitude search openssh-server-x509 没结果(其他机同样源配置是有结果的),于是上内部源下载openssh-server-x5 ...

  2. android判断服务是否是运行状态

    /** * 判断服务是否处于运行状态. * @param servicename * @param context * @return */ public static boolean isServi ...

  3. ant design pro(二)布局

    一.概述 参看地址:https://pro.ant.design/docs/layout-cn 其实在上述地址ant-design上已经有详细介绍,本文知识简述概要. 页面整体布局是一个产品最外层的框 ...

  4. Python 正则表达式学习摘要及资料

    来源:Michael_翔_ 摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会 ...

  5. Linux命令-目录处理命令:mkdir

    mkdir /tmp/beijing mkdir -p /tmp/shijiazhuang/yuhuaqu 一条命令可以同时创建父目录和子目录 mkdir /tmp/beijing/chaoyangq ...

  6. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码

    详解C#泛型(二)   一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...

  7. hdu 4779 Tower Defense (思维+组合数学)

    Tower Defense Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) ...

  8. fatfs文件系统f_lseek追加文件

    http://home.eeworld.com.cn/my/space-uid-430378-blogid-74720.html 这个时候我以为读出的数据应该是stm32f107学习!!!文件系统学习 ...

  9. Mysql中count(*),DISTINCT的使用方法和效率研究

    在处理一个大数据量数据库的时候 突然发现mysql对于count(*)的不同处理会造成不同的结果 比如执行 SELECT count(*) FROM tablename 即使对于千万级别的数据mysq ...

  10. java线程同步方法,方法块差别

    先说同步方法.它究竟是锁定的当前对象,还是当前类 代码块1 package com.ssss; public class Thread1 implements Runnable { //public ...