设置Caliburn IWindowmanager';使用句柄HWND将的所有者属性设置为Excel
我有一个Excel Vsto加载项应用程序,其中我使用Calibrun Micro Autofac托管WPF应用程序构建。我有一个弹出Excel的对话框,我希望该弹出窗口的所有者设置为该Excel窗口。我看到的唯一方法是使用需要窗口实例的WindowInteropHelper类 我使用的设置如下:设置Caliburn IWindowmanager';使用句柄HWND将的所有者属性设置为Excel,excel,vsto,caliburn.micro,Excel,Vsto,Caliburn.micro,我有一个Excel Vsto加载项应用程序,其中我使用Calibrun Micro Autofac托管WPF应用程序构建。我有一个弹出Excel的对话框,我希望该弹出窗口的所有者设置为该Excel窗口。我看到的唯一方法是使用需要窗口实例的WindowInteropHelper类 我使用的设置如下: dynamic settings = new ExpandoObject(); windowManager.ShowDialog(viewModel, settings: settings); 我
dynamic settings = new ExpandoObject();
windowManager.ShowDialog(viewModel, settings: settings);
我把窗户展示成这样:
dynamic settings = new ExpandoObject();
windowManager.ShowDialog(viewModel, settings: settings);
那么,我应该如何将settings.Owner属性设置到此excel窗口(其句柄是已知的),以便弹出窗口始终位于excel窗口的顶部???看起来您正在托管WPF应用程序(加载项)Excel内部是一个Office应用程序,Caliburn.Micro在
BootstrapperBase
类中有一个构造函数。正是针对这种情况,它看起来是这样的:BootstrapperBase(useApplication=true)
,因此,您应该从BootstrapperBase
派生引导程序,并将false
传递给基本构造函数。大概是这样的:
class MyBootstrapper : BootstrapperBase {
MyBootstrapper()
: base(false)
{
}
}
然后Caliburn.Micro将为您正确设置所有者属性,您无需担心。现在,如果你知道这一点,但它没有工作,然后评论这一点,我会给你一个具体的解决方案,你的情况
编辑:要设置所创建窗口的所有者,我们需要设置owner
属性(类型为window
),但问题是您使用的是本机win32窗口,因此您只有一个句柄,而WPF windows不接受句柄作为所有者,第二个问题是,我们没有对已创建窗口的引用,因此我们可以将其包装在WindowInteropHelper
中,为了解决这个问题,我建议如下:
var设置=新的ExpandoObject()代码>
settings.Tag=“THE_ONE”
windowManager.ShowDialog(视图模型,设置:设置)代码>
var-ourWindow=Application.Current.Windows.FirstOrDefault(w=>w.Tag==“theu ONE”)代码>
WindowInteropHelper
像这样包装它:var
interopHelper=新窗口interopHelper(我们的窗口)代码>
interopHelper.Owner=(IntPtr)//
把你的本地窗口把手放在这里代码>
这就是我能帮你的全部,我希望它能起作用。是的,我正在做这样的事情:受保护的AutofacBootstrapper():base(false)@vinaysingri,我已经编辑了答案,请检查编辑。效果很好:)谢谢!!