2012-03-29 83 views
10

どのようにz-インデックスwindowsformhostを設定するかは、常にWPF要素の先頭にあるとは限りませんか?WindowsFormsHostは常にWPF要素の一番上です

+2

単純な回答:できません。 [ここ](http://stackoverflow.com/questions/8006092/controls-dont-show-over-winforms-host)を参照してください。 – Clemens

答えて

12

MSDN (Layout Considerations for the WindowsFormsHost Element)

によると、Aは、Windowsフォームコントロールでホストさは別のHWNDに描かれているので、それは 常にWPF要素の上に描画されます。

これは、設計上の制限

Windowsで異なるグラフィック技術を使用してTechnology Regions Overview

は、しかし、私は、このためのいくつかのハッキングがあるように思われることがわかっグーグル時に発生する可能性がある問題について説明し、MSDNからのもう一つの良い品です(空域制限として知られている)

一つのハックは、(それが動作するかどうかわからないので、個人的にそれを試したことがない) this link

であります数年後
+8

"hack" link 403s – RJFalconer

1

更新、(2016から09):

私の次の答えは、トップのコメントで述べたように、有効でなくなった、と.NET 4.5の最終版では利用できませんでした、またはその後のリリース。残念ながら、私が含まれているリンクには、現在の.NETの "現在のバージョン"に対応するHwndHostsのzオーダー情報があり、実際にはこの機能が存在すると信じる人もいます。それはしません。回避策はありません。

オリジナルの答え:

年後、物事は、.NET 4.5でビットを変更しました。私が行ったように、この時に多くをつまずいた人のために、ここでのMSDNのWalkthrough: Arranging Windows Forms Controls in WPFからより多くの更新の抜粋です。

デフォルトでは、目に見えるにWindowsFormsHost要素は常に他のWPF要素の上に描画されているが、彼らは、 zオーダーの影響を受けません。 z-orderingを有効にするには、WindowsFormsHostのIsRedirectedプロパティをtrueに設定し、CompositionModeプロパティをFullまたはOutputOnlyに設定します。

.NET 4.5を使用しているときあなたがする必要があるすべては、あなたのWindowsFormsHost要素IsRedirected="True"CompositionMode="Full"またはCompositionMode="OutputOnly"に次の属性を追加しています。

+24

今日チェックしました。これらのプロパティは、.net 4.5のベータリリースにのみありました。残念ながら、彼らは通常のリリースに向かわなかった。 –

+3

1.3.10 Windows Presentation Foundation(WPF) 1.3.10.1 HwndHost機能が.NET Framework 4.5ベータ版のWPFから削除されました .NET Framework 4.5 Developer Previewには、WPF HwndHostリダイレクト機能が含まれていました。ただし、この機能にはいくつかの既知の問題があり、.NET Framework 4.5 Betaから削除されています。将来のリリースには含まれません。 この問題を解決するには 回避策はありません。 – lukaszk

+0

.NET 4で使用するには?出来ますか? – mrhands

0

私はちょうど同じ問題に遭遇しました。

潜在的な回避策はあり - Windowsホストウィンドウコントロールと表示したいWPF要素の性質に応じて:

は私が私を可能にするためにWindowsFormsHostコントロールのVisibility私のビューモデルのプロパティへのバインドその上に表示したいWPFを表示したいときに、ホスト(およびその上のコントロール)を非表示にします。

0

私の状況では、私のWindowsFormsHostは2行のグリッドにあります。一番下の行にはStackPanelがあり、その内容に応じて高さが変更されます。私はStackPanelのLayoutUpdatedイベントを処理して、WindowsFormsHostをグリッドのActualHeightからActualHeightを引くことによってサイズ変更します。 ActualHeight not Heightを必ず使用してください。

 void ResizeWinhost() 
    { 
     mainGrid.UpdateLayout(); 
     detailPanel.UpdateLayout(); 
     winHost.Height = mainGrid.ActualHeight - detailPanel.ActualHeight - 5; 
    } 
関連する問題