C#/Outlook互操作文件夹窗口不是模态的
我有一个关于Outlook文件夹窗口的问题 当我直接从Outlook调用它时,它工作正常,让我选择一个我想要的文件夹,作为一个模式窗口(这样可以防止Outlook窗口被点击) 但是,当我从Outlook中的自定义WPF窗口调用它时,它的行为就像一个非模式窗口(不禁用WPF窗口,也不阻止它被选中) 所以问题是,我如何使它表现为一个模态窗口,或者我如何禁用我的WPF窗口来阻止用户输入(甚至阻止窗口被选择,就像打开模态窗口一样) 我试图由调度员调用它,但没有用 谢谢 UPD:我使用outlookapi方法在其中调用Pickfolder窗口C#/Outlook互操作文件夹窗口不是模态的,c#,wpf,outlook,C#,Wpf,Outlook,我有一个关于Outlook文件夹窗口的问题 当我直接从Outlook调用它时,它工作正常,让我选择一个我想要的文件夹,作为一个模式窗口(这样可以防止Outlook窗口被点击) 但是,当我从Outlook中的自定义WPF窗口调用它时,它的行为就像一个非模式窗口(不禁用WPF窗口,也不阻止它被选中) 所以问题是,我如何使它表现为一个模态窗口,或者我如何禁用我的WPF窗口来阻止用户输入(甚至阻止窗口被选择,就像打开模态窗口一样) 我试图由调度员调用它,但没有用 谢谢 UPD:我使用outlookapi
var folder = NetOffice.OutlookApi.Application.Session.PickFolder();
当我直接从Outlook窗口使用它时,它工作正常,但在自定义窗口中不工作
UPD2:为了显示我的自定义窗口,有如下内容:
var view = new SettingsPageView();
...
var window = new MyMessageBoxWindow(new MyMessageBoxViewModel());
window.DataContext = view.ViewModel;
window.Content = view;
window.ShowDialog(); // that calls System.Windows.Window.ShowDialog() deeper inside
使用IOleWindow和WindowInteropHelper将窗体显示为Outlook主窗口的子窗口
using System.Runtime.InteropServices;
...
IntPtr wnd = new IntPtr(0);
object window = _application.ActiveWindow();
if (window != null)
{
IOleWindow oleWindow = window as IOleWindow;
if (oleWindow != null)
{
oleWindow.GetWindow(out wnd);
}
}
...
if (wnd != IntPtr.Zero)
{
WindowInteropHelper helper = new WindowInteropHelper(archiveSettingWindow);
window.Owner = wnd;
}
您可以添加相关代码(打开窗口的代码)吗?我假设您只是忘记了在Show()
(或类似)方法中传递所有者窗口。