[英]WPF Clicking on a dynamic menu item and returning the name?
我有一个文件菜单,在加载时,从目录中的文件名填充一些menuItems
。
<MenuItem
x:Name="LayoutLoad"
Header="Load saved layout"
HorizontalAlignment="Left"
Width="200"
/>
//加载时(后面的代码)
string[] filePaths = Directory.GetFiles("Settings/layouts");
for (int i = 0; i < filePaths.Count(); i++)
{
MenuItem item = new MenuItem {
Header = System.IO.Path.GetFileName(filePaths[i]),
Name = System.IO.Path.GetFileName(filePaths[i])
};
item.Click += new RoutedEventHandler(Chooselayout);
LayoutLoad.Items.Add(item);
}
与项目链接的点击事件是:
public void Chooselayout(Object sender, RoutedEventArgs e)
{
string fileName = ((MenuItem)sender).Name;
var serializer = new XmlLayoutSerializer(dockingManager);
using (var stream = new StreamReader(fileName))
serializer.Deserialize(stream);
}
行string fileName = ((MenuItem)sender).Name;
失败。 我可以通过这种方式返回被单击项的名称吗? 我只是在错误地投射吗? 还是以不正确的方式处理?
谢谢。
WPF中元素名称的规则比路径和文件名称的规则严格。 例如,我不相信Name
可以包含空格或斜杠。 我建议您改用Tag
(并在处理程序中强制返回string
)。
另外,请查看您如何列出文件:
Directory.GetFiles("Settings/layouts")
您正在寻找<working directory>/Settings/layouts/
中存在的文件。 但是,当您创建StreamReader
,只给它指定了文件名,因此它将在<working directory>/
查找该文件。 您需要为其提供绝对路径或完整的相对路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.