C#/Outlook Interop Pickfolder窗口不是模态的

本文关键字:模态 窗口 Pickfolder Outlook Interop | 更新日期: 2023-09-27 18:26:08

我有一个关于Outlook Pickfolder窗口的问题。

当我直接从Outlook调用它时,它可以很好地工作,并让我选择一个我想要的文件夹,充当模式窗口(这样它就可以防止Outlook窗口被点击)。

但是,当我从Outlook中的自定义WPF窗口调用它时,它的行为就像一个非模态窗口(不会禁用我的WPF窗口,也不会阻止它被选中)。

因此,问题是,我如何使它表现为模式窗口,或者我如何禁用WPF窗口以阻止用户输入(甚至阻止像打开模式窗口时那样选择窗口)?

我试图通过Dispatcher调用它,但它没有帮助。

谢谢!

UPD:我使用Outlook API方法,该方法调用内部的Pickfolder窗口。

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

C#/Outlook Interop Pickfolder窗口不是模态的

使用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;
}