如何在父应用程序和 WPF 窗体之间切换焦点?

How to switch focus between parent application and WPF forms?

我正在开发一个 Excel Office 插件,我在其中使用 WPF 表单,我能够创建一个表单并在以下代码的帮助下单击按钮时显示它

UC frm = new UC();
ElementHost.EnableModelessKeyboardInterop(frm);
frm.Show();
System.Windows.Threading.Dispatcher.Run();

我将 Window 设置为 TopMost,这样当我 select 在 Excel 中的范围时,我希望地址出现在 WPF 文本框中。 发生的事情是当我打开表单并且如果我去 select Excel 范围时,焦点不会返回到 Excel 应用程序并且不会触发 SelectionChange 事件。

如果我删除此行 System.Windows.Threading.Dispatcher.Run(); 它可以工作,但是当我输入它时我不会关注 WPF 表单(无法在表单文本框中输入任何内容)总是到达 Excel细胞

能否请一些人帮忙在这里切换焦点

我用这段代码弄明白了

var thread = new Thread(() =>
{
mw = new UI.MainWindow();
mw.Show();
mw.Closed += (sender2, e2) => mw.Dispatcher.InvokeShutdown();
Dispatcher.Run();
});

thread.SetApartmentState(ApartmentState.STA);
thread.Start();