我有一个 Excel 加载项,可以在启动时显示 WPF 窗口
private void ThisAddIn_Startup(object sender, EventArgs e)
{
GetOfficeVersion();
Application.WorkbookOpen += Application_WorkbookOpen;
Application.WorkbookAfterSave += Application_WorkbookAfterSave;
TestInputsUI.Instance.Show();
}
代码没什么特别的,
TestInputsUI.Instance.Show();
是我的wpf窗口
问题是当我打开工作簿并尝试在 wpf 文本框中键入内容时,它会将我的输入发送到活动单元格而不是“文本框”
可以通过将 wpf 显示为对话框来简单地避免这种情况,但这将冻结与 Excel 应用程序的所有交互,直到对话框关闭。
我尝试将焦点强制到文本框,甚至在定时循环中执行此操作,但没有任何效果
可以通过生成一个新线程来解决该问题,该线程将负责显示窗口并处理输入:
private void ThisAddIn_Startup(object sender, EventArgs e)
{
ShowModelessWindow();
}
private static void ShowModelessWindow()
{
var thread = new Thread(() =>
{
var wpfWindow = new MainWindow();
wpfWindow.Show();
wpfWindow.Closed += (s, _) => wpfWindow.Dispatcher.InvokeShutdown();
Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
我准备了一个简单的演示。