WPF动态menuItem创建错误

时间:2017-09-06 21:16:57

标签: c# wpf

我有一个文件菜单,在加载时,会从目录中的文件名中填充一些menuItems

<MenuItem 
    x:Name="LayoutLoad" 
    Header="Load saved layout" 
    HorizontalAlignment="Left" 
    Width="200"
    />

// on load(代码隐藏)

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);
}

这很好用,直到刚才,现在它不会编译,崩溃:

MenuItem item = new MenuItem {
            Header = System.IO.Path.GetFileName(filePaths[i]),
            Name = System.IO.Path.GetFileName(filePaths[i])
        };

使用:

Exception thrown: 'System.Windows.Markup.XamlParseException' in PresentationFramework.dll

Additional information: The invocation of the constructor on type 'Form_beta.MainWindow' that matches the specified binding constraints threw an exception.

如果我注释掉该代码并将其替换为:

string test = System.IO.Path.GetFileName(filePaths[i]);

它工作正常,并返回我期望的文件路径。

这里出了什么问题?谢谢。

2 个答案:

答案 0 :(得分:1)

这可能只是意味着它抛出异常,然后你没有在ctor中调用Initialize()。也许是因为它在GetFiles()上返回null?

尝试启用Windows下的“例外” - >“例外”并勾选该框。然后它应该打破例外。

答案 1 :(得分:0)

解决。该异常是由名称中有空格的目录中的文件引起的,该文件不能用作menuItem的标题。