【发布时间】: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:
<StackPanel x:Name="mainpanel"></StackPanel>
请帮助我处理按钮的单击事件或在堆栈面板中单击的按钮的名称。
【问题讨论】:
-
您通常会在 ItemTemplate 中使用带有 Button 的 ItemsControl,而不是在代码中创建按钮并以编程方式将它们放入 StackPanel。 Button 的 Command 属性将绑定到项类中的 ICommand 属性。从这里开始阅读:Data Templating Overview。
-
@anjalinsneha:只需在
foreach循环中连接一个点击事件处理程序:newButton.Click += Your_Handler; -
非常感谢@mm8。我的问题已经解决了,我得到了解决方案。非常感谢。当我在研究这个时,我一直在努力,你刚刚解决了一条线。很有帮助。
标签: xml wpf button dynamic stackpanel