3

ユーザーがリボン ボタンをクリックしたときに多数のカスタム Wpf ウィンドウ ダイアログを表示する Microsoft Word 2010 vsto アドインを作成しました。

私が抱えている問題は、タスク バーの Word アイコンをクリックすると、カスタム ダイアログが Word インスタンスの後ろに消えることです。

いくつかのグーグルの後、ウィンドウの Owner プロパティを設定することでこれを修正できるように見えますが、Word アプリケーションの Window インスタンスを取得するのに苦労しています。

以下に関連するコードを添付しましたが、何か提案はありますか?

using WordNS = Microsoft.Office.Interop.Word;

Window wrapperWindow = new Window();
wrapperWindow.ResizeMode = ResizeMode.NoResize;
wrapperWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;
wrapperWindow.ShowInTaskbar = false;
wrapperWindow.Content = dialogViewModel.View;
wrapperWindow.Title = dialogViewModel.Title;
wrapperWindow.SizeToContent = SizeToContent.WidthAndHeight;

WordNS.Application app = (WordNS.Application)Marshal.GetActiveObject("Word.Application");
wrapperWindow.Owner = (Window)app.ActiveWindow;

ActiveWindow を Window にキャストするときの無効なキャスト例外

4

2 に答える 2

2

例外は、あなたの質問に対する答えがノーであることを明確に示しています.

Microsoft.Office.Interop.WordWord のメイン ウィンドウのウィンドウ ハンドル (HWND) を取得する手段が提供されている場合 (または Win32 呼び出しによってそのハンドルを取得している場合)、WindowInteropHelper.Owner プロパティによってウィンドウの所有者を設定してみてください

于 2012-08-08T10:53:50.823 に答える
2

以下は、これを機能させるためのWindowInteropHelper完全なコードです。

1) クラス内の任意の場所にこのポインターを定義します。

[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

2) 次のコードをウィンドウ宣言コードに追加します。

        Window wrapperWindow = new Window();
        //Set all the relevant window properties

        //Set the owner of the window to the Word application
        IntPtr wordWindow = GetForegroundWindow();
        WindowInteropHelper wih = new WindowInteropHelper(wrapperWindow);
        wih.Owner = wordWindow;
于 2012-08-10T06:14:08.693 に答える