問題は、VSTOアドインのみが公開されるため、WPFウィンドウではsystem.form.windowのみが使用され、VSTOアプリケーションで所有者オブジェクトになるようにExcelを設定できないということです。 Excelのhwnd、またはアクティブウィンドウはCOMであるため、ネイティブウィンドウとして表示されます。これは、WindowStartUpLoadationがセンターオーナーに設定されている場合、動作しないことを意味します。だから、私はこれを回避しなければならない。Excel VSTOアドインでWPFウィンドウを中央に揃える方法
this siteを読んだあとで私がこれまでに思いついたのは、ウィンドウを手作業で中心に置くことですが、彼の簡単な例でも私のウィンドウは決して中央に表示されません。
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;
}
*具体的な問題を明確にしたり、詳細を追加して必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。* –
私の意味を明確にするために少し編集しました。私はより具体的な詳細を詳しく述べることをうれしく思っています。 –