次のコードを使用して、Outlook の新しいメッセージ ウィンドウから WPF ウィンドウを表示します。
private void DisplayWindow(Window window) {
var wih = new System.Windows.Interop.WindowInteropHelper(window);
wih.Owner = GetForegroundWindow();
window.ShowInTaskbar = false;
window.ShowDialog();
}
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
私の問題は、ToolTips と ComboBox のドロップダウンが表示されると、WPF ウィンドウが新しいメッセージ ウィンドウの後ろに消え、「ポップアップ」コンテンツだけが前面に残ることです。なぜこれが起こっているのか、ウィンドウをホストする正しい方法は何かを説明できますか?
編集:
これは、受信者が送信ボックスに追加された場合にのみ発生し、フォアグラウンド ウィンドウが新しいメール メッセージ ウィンドウである場合にのみ問題になるようです。
複製するには:
Outlook アドイン プロジェクトと WPF プロジェクト (.NET 4.0 を対象とする) を新しいソリューションに追加します。
MainWindow.xaml にいくつかの項目を含む ComboBox を配置します。
App.xaml から を削除しStartupUri
、App.cs に次を追加します。
public void ShowWindow() {
MainWindow window = new MainWindow();
var wih = new System.Windows.Interop.WindowInteropHelper(window);
wih.Owner = GetForegroundWindow();
window.ShowInTaskbar = false;
window.ShowDialog();
}
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
WindowsBase
、System.Xaml
およびPresentationFramework
Outlook プロジェクトへの参照を追加します。
.xml に以下を記述して、Outlook プロジェクトにリボン (XML) を追加します。
<customUI ...>
<ribbon>
<tabs>
<tab idMso="TabNewMailMessage">
<group id="MyGroup"
insertAfterMso="GroupMailNew">
<button id="myButton"
size="large"
onAction="myButton_Action"
imageMso="HappyFace"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
リボン コードに次を追加します。
MyWpfApplication.App app;
public void Ribbon_Load(Office.IRibbonUI ribbonUI) {
this.ribbon = ribbonUI;
var appThread = new Thread(new ThreadStart(() => {
this.app = new MyWpfApplication.App();
app.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
app.Run();
}));
appThread.SetApartmentState(ApartmentState.STA);
appThread.Start();
}
public void myButton_Action(Office.IRibbonControl control) {
// Dispatcher used as cross thread operation.
app.Dispatcher.BeginInvoke((Action)(() => {
app.ShowWindow();
}));
}
ThisAddIn に以下を追加します
protected override Microsoft.Office.Core
.IRibbonExtensibility CreateRibbonExtensibilityObject() {
return new Ribbon();
}
Outlook アドインを実行し、新しいメッセージを作成し、受信者を追加して、スマイリー フェイス ボタンをクリックします。をクリックするとバグが表示されますComboBox
。