我正在使用 Electron.Net 包装一个 ASP.Net MVC 网页,我目前正在尝试替换默认菜单。我有一个自定义菜单正在工作,代码正在替换菜单。但是当使用 运行程序时electronize start
,会显示默认菜单,直到我单击最左侧的默认项 ( file
)。一旦我单击该项目,我的菜单就会加载。
我认为这个问题与仅在与菜单交互时运行的 MenuController 有关,所以我认为我需要实现某种异步功能。我不知道该怎么做,我在网上查过,但没有找到太多。
菜单控制器.cs
public IActionResult Index()
{
if (HybridSupport.IsElectronActive)
{
MenuItem[] menu = new MenuItem[]
{
new MenuItem
{
Label = "File",
Submenu = new MenuItem[]
{
new MenuItem
{
Label = "Open",
Accelerator = "CmdOrCtrl+O"
},
new MenuItem
{
Label = "Save",
Accelerator = "CmdOrCtrl+S"
},
new MenuItem
{
Label = "Save As",
Accelerator = "CmdorCtrl+Shift+S"
}
}
},
new MenuItem
{
Label = "Edit",
Submenu = new MenuItem[]
{
new MenuItem
{
Label = "Preferences"
}
}
},
new MenuItem
{
Label = "View",
Submenu = new MenuItem[]
{
new MenuItem
{
Label = "TODO"
},
new MenuItem
{
Label = "Reload",
Click = () =>
{
Electron.WindowManager.BrowserWindows.ToList().ForEach(BrowserWindow =>
{
if (BrowserWindow.Id != 1)
BrowserWindow.Close();
else
BrowserWindow.Reload();
});
}
},
new MenuItem
{
Label = "Toggle Full Screen",
Accelerator = "CmdOrCtrl+F",
Click = async () =>
{
bool isFullScreen = await Electron.WindowManager.BrowserWindows.First().IsFullScreenAsync();
Electron.WindowManager.BrowserWindows.First().SetFullScreen(!isFullScreen);
}
},
new MenuItem
{
Type = MenuType.separator
},
new MenuItem
{
Label = "Open Developer Tools",
Accelerator = "CmdOrCtrl+Shift+I",
Click = () =>
{
Electron.WindowManager.BrowserWindows.First().WebContents.OpenDevTools();
}
}
}
},
new MenuItem
{
Label = "Navigate",
Submenu = new MenuItem[]
{
new MenuItem
{
Label = "Home",
Submenu = new MenuItem[]
{
new MenuItem
{
Label = "Home",
Click = () =>
{
Electron.WindowManager.BrowserWindows.First().LoadURL($"http://localhost:{BridgeSettings.WebPort}/");
}
},
new MenuItem
{
Label = "Privacy",
Click = () =>
{
Electron.WindowManager.BrowserWindows.First().LoadURL($"http://localhost:{BridgeSettings.WebPort}/Privacy");
}
}
}
},
new MenuItem
{
Type = MenuType.separator
},
new MenuItem
{
Label = "Editor",
Submenu = new MenuItem[]
{
new MenuItem
{
Label = "Editor",
Click = () =>
{
Electron.WindowManager.BrowserWindows.First().LoadURL($"http://localhost:{BridgeSettings.WebPort}/Editor/");
}
}
}
}
}
}
};
Electron.Menu.SetApplicationMenu(menu);
}
return Ok();
}
视图/编辑器/Index.cshtml
@model CircuitSharp.Models.EditorModel
@{
Layout = null;
}
<!--
EDITOR INDEX PAGE
-->
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Editor</title>
<!--
IMPORTING THE CUSTOM MENU
-->
<link rel="import" href="Menu" />
</head>
<body>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
</body>
</html>