問題は、WPF ウィンドウが system.form.window のみを受け取るため、VSTO アプリケーションで Excel を所有者オブジェクトに設定できないことです。これは、VSTO アドインが Excel の hwnd のみを公開するか、そのアクティブなウィンドウをネイティブ ウィンドウとして公開するためです。コム。つまり、WindowStartUpLoadation がセンター オーナーに設定されている場合は機能しません。だから私はこれを回避することを余儀なくされています。
このサイトを読んだ後、これまでに思いついたのは、ウィンドウを手動で中央に配置しようとすることですが、彼の単純な例でさえ、ウィンドウが中央に表示されません。
private static void CenterWpfWindowInExcel(WpfParameterDialog wpfDialog)
{
WindowInteropHelper helper = new WindowInteropHelper(wpfDialog);
helper.Owner = new IntPtr(Globals.ExcelAddin.Application.Hwnd);
// Manually calculate Top/Left to appear centered
double nonWpfOwnerLeft = Globals.ExcelAddin.Application.ActiveWindow.Left; // Get non-WPF owner’s Left
double nonWpfOwnerWidth = Globals.ExcelAddin.Application.ActiveWindow.Width; // Get non-WPF owner’s Width
double nonWpfOwnerTop = Globals.ExcelAddin.Application.ActiveWindow.Top; // Get non-WPF owner’s Top
double nonWpfOwnerHeight = Globals.ExcelAddin.Application.ActiveWindow.Height; // Get non-WPF owner’s Height
wpfDialog.WindowStartupLocation = WindowStartupLocation.Manual;
wpfDialog.Left = nonWpfOwnerLeft + (nonWpfOwnerWidth - wpfDialog.Width)/2;
wpfDialog.Top = nonWpfOwnerTop + (nonWpfOwnerHeight - wpfDialog.Height)/2;
}
何か案は?