
例如有一个xml,层次是
<classes>
<Students Name ="class1">
<Student>
<UserName>01</UserName>
<Sex>1</Sex>
<Age>22</Age>
</Student>...
就是年级有几个班,每个班有几个学生这样子。
expander的header展示班级名称,content展示每个班的学生列表。
建议用后台代码去动态创建expander和listbox。listbox的itemtemplate可以在前台写,后台引用。
后台遍历XML数据源的时候看第一层有几个数据(demol里的Students)创建expander并对其header赋值。然后创建expander.content中的listbox并赋值其Itemsource。
也可以刚开始只创建expander。在expanderItem展开的时候再去动态对其content创建listobx并赋值。
1 在res/layout 中新建一个xxx.xml布局文件
2.在新建的布局文件中填写想要的布局内容(如下)
3.通过下面的方式完成
就是一个基础框架的例子。
首先根据ID获取当前权限的菜单xml文件,一般将xml存储到数据库里面。然后通过xml文件去编辑菜单。
再将菜单添加到form界面上面,给你个简单例子。
public partial class TreeMenu : RadTreeView{
#region Field
private XDocument xDoc = null
#endregion
#region Property
public XDocument XDoc
{
set
{
this.xDoc = value
var items = xDoc.Element("Menu").Elements("MenuItem")
foreach (var item in items.ToList())
{
this.Nodes.Add(this.CreateTreeNode(item))
}
}
}
#endregion
public TreeMenu()
{
InitializeComponent()
}
public TreeMenu(IContainer container)
{
container.Add(this)
InitializeComponent()
this.NodeCheckedChanged += TreeMenu_NodeCheckedChanged
}
#region Method
/// <summary>
/// 点击节点更换
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TreeMenu_NodeCheckedChanged(object sender, RadTreeViewEventArgs e)
{
//throw new NotImplementedException()
RadTreeNode node = sender as RadTreeNode
}
private RadTreeNode CreateTreeNode(XElement xel)
{
//string treeName = xel.Attribute("Text").Value.ToString()
RadTreeNode node = new RadTreeNode()
node.Text = xel.Attribute("Text").Value.ToString()
if (xel.Elements("MenuItem").Count() > 0)
{
foreach (var q in xel.Elements("MenuItem"))
{
node.Nodes.Add(this.CreateTreeNode(q))
}
}
node.Tag = xel
return node
}
#endregion
}
菜单事件部分肯定要用到反射,都是些基础的东西。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)