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

时间:2018-11-04 02:58:27

标签: c# .net wpf auxil-excel-add-in

我正在开发一个使用WPF表单的Excel Office加载项,我能够创建一个表单,并在以下代码的帮助下在单击按钮时显示该表单

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

我将Window设置为TopMost,因此当我在Excel中选择一个范围时,我希望该地址出现在WPF文本框中。 发生了什么事?当我打开表单时,如果我去选择Excel范围,则焦点不会回到Excel应用程序,并且不会触发SelectionChange事件。

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

可以请一些帮助,在这里切换重点

1 个答案:

答案 0 :(得分:0)

我通过使用此代码找出了答案

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