我有一个文件菜单,在加载时,会从目录中的文件名中填充一些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]);
它工作正常,并返回我期望的文件路径。
这里出了什么问题?谢谢。
答案 0 :(得分:1)
这可能只是意味着它抛出异常,然后你没有在ctor中调用Initialize()。也许是因为它在GetFiles()上返回null?
尝试启用Windows下的“例外” - >“例外”并勾选该框。然后它应该打破例外。
答案 1 :(得分:0)
解决。该异常是由名称中有空格的目录中的文件引起的,该文件不能用作menuItem的标题。