7

問題は、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;
    }

何か案は?

4

1 に答える 1