繁体   English   中英

WPF单击动态菜单项并返回名称?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM