【问题标题】:How to create the click event of a button which is dynamically created by reading the xml file in wpf?如何创建通过读取 wpf 中的 xml 文件动态创建的按钮的单击事件?
【发布时间】:2020-06-17 08:05:49
【问题描述】:

我是 wpf 的新手,我正在 wpf 控件上做一些 poc。我通过读取我的 xml 文件动态创建了按钮,并将按钮放在 stackpanel 中。我想编写按钮的单击事件通过单击它,我编写了一个单击事件,它给出了堆栈面板内的所有按钮名称,但我想要的是我想在单击时获取相应的按钮名称。

我的 XML 文件:

<root>
  <Project Name="FundsCrossReferences" Label ="SMA Model Management" LibraryName="SMAMC" ClassName="" Roles="">
  </Project>
  <Project Name="SMAFI" Label ="SMAFI" LibraryName="SMAFI" ClassName="" Roles="">    
  </Project> 
 </root>

我的 window.xaml.cs 文件

private void windowloaded()
        {         
            StringBuilder result = new StringBuilder();
            foreach (XElement level1Element in XElement.Load(@"C:\Users\Trial\XMLFile.xml").Elements("Project"))
            {

                    result.AppendLine(level1Element.Attribute("Name").Value+"/");

            }
             List<string> addnames = new List<string>();
             string[] stringArray = result.ToString().Split('/').ToArray();
            stringArray = stringArray.Take(stringArray.Count() - 1).ToArray();
            foreach (var arrayname in stringArray)
            {
                var names = arrayname.Replace("\r\n", "");
                addnames.Add(names);
            }
            List<string> list = addnames.ToList();
            foreach(var buttoname in list)
            {
                var newButton = new Button() { Name= buttoname,Height=39,Foreground=Brushes.Black,Content=buttoname};
                this.mainpanel.Children.Add(newButton);
            }     
         }

我的 Window.xaml: &lt;StackPanel x:Name="mainpanel"&gt;&lt;/StackPanel&gt;

请帮助我处理按钮的单击事件或在堆栈面板中单击的按钮的名称。

【问题讨论】:

  • 您通常会在 ItemTemplate 中使用带有 Button 的 ItemsControl,而不是在代码中创建按钮并以编程方式将它们放入 StackPanel。 Button 的 Command 属性将绑定到项类中的 ICommand 属性。从这里开始阅读:Data Templating Overview
  • @anjalinsneha:只需在foreach 循环中连接一个点击事件处理程序:newButton.Click += Your_Handler;
  • 非常感谢@mm8。我的问题已经解决了,我得到了解决方案。非常感谢。当我在研究这个时,我一直在努力,你刚刚解决了一条线。很有帮助。

标签: xml wpf button dynamic stackpanel


【解决方案1】:

只需在foreach 循环中连接一个点击事件处理程序:

newButton.Click += Your_Handler;

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 2021-08-09
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多