c# wpf中如何向expander中动态添加xml中的内容

c# wpf中如何向expander中动态添加xml中的内容,第1张

提供下思路。

例如有一个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

    }

菜单事件部分肯定要用到反射,都是些基础的东西。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11359601.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存