Popup
を使用している場合、ポップアップが最初に表示された後にPlacementTarget
でもCustomPopupPlacementCallback
も使用されません。したがって、これらのプロパティを使用すると、ポップアップはボタンが移動するのを追跡することができません。
いくつかの方法は、あなたが望むものを達成するための私に発生します。
- がボタンにカスタム
Adorner
を取り付け、その中にポップアップを置きます。欠点:ポップアップはButtonやその周辺の要素には接続されていないため、それらからプロパティ&のDataContextを継承しません。
ボタンにカスタムAdorner
を添付します。このアドワーナーは、ボタンがAdornerLayer
を基準にして移動したときに測定を行い、通話をアレンジし、Popup
の位置を手動で更新できるようにします。 AdornerDecorator
がWindow
に対して移動しない限り(たとえば、それがウィンドウの直接の子である場合)、ウィンドウサイズの変更を監視することによって、AdornerLayer
を簡単に検出できます。短所:複雑なコード&が得意です。
Popup
を一切使用しないでください。その代わりに、<Grid>
のボタンを幅と高さがゼロで希望の位置にある<Canvas>
の横にラップします。 <Canvas>
の内部には、適切なZIndexをポップアップに追加するためにUserControl
を追加します。それはWPFでちょうど良いキャンバスの端を越えて広がります。 Popup
コントロールを使用する代わりに、UserControl
の可視性を制御するだけです。欠点:他のすべてのオブジェクトの上に完全に存在するわけではありませんが、ウィンドウの端からは伸びることはできません(ただし、XBAPでは問題ではないかもしれません)。