WPF 窗口从 VSTO 外接程序创建时不获取键盘输入

问题描述 投票:0回答:1

我有一个 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 应用程序的所有交互,直到对话框关闭。 我尝试将焦点强制到文本框,甚至在定时循环中执行此操作,但没有任何效果

wpf vsto excel-addins
1个回答
0
投票

可以通过生成一个新线程来解决该问题,该线程将负责显示窗口并处理输入:

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

我准备了一个简单的演示

解决方案在这个答案中进行了描述,并源自在此博客中

© www.soinside.com 2019 - 2024. All rights reserved.