Я могу придумать несколько способов, но вот как я, вероятно, подхожу к этому:
- Получить дескриптор из активного окна Outlook.
- Установить родителя в вашем окне.
Чтобы получить ручку, используйте это:
using System.Runtime.InteropServices;
//use pInvoke to find the window
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
//now use it
public static void Test(long handle)
{
Microsoft.Office.Interop.Outlook.Application app = Globals.ThisAddIn.Application;
IntPtr hWnd = (IntPtr)FindWindow("rctrl_renwnd32\0", app.ActiveWindow().Caption);
TestingWindowView win = new TestingWindowView(hWnd);
win.ShowDialog();
}
Затем в конструкторе вашего окна вы можете использовать WindowInteropHelper
, чтобы назначить владельца:
using System.Windows.Interop;
public TestingWindowView(IntPtr handle)
{
InitializeComponent();
new WindowInteropHelper(this).Owner = handle;
}
и в xaml теперь вы можете сделать это:
WindowStartupLocation="CenterOwner"
Я уверен, что есть другие способы получить дескриптор для Outlook, но этот проверен и проверен.
Надеюсь, что поможет