いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

ドラッグ可能なPopup (Draggable Popup)

忘れないうちにメモメモ。

WPFのPopupは、手軽にポップアップ状態を実現できるので便利なのですが

基本このポップアップはWindowのようにマウスで位置を動かすことができません。

たまーにですが、動かしたいときがあります。

で、ネットで調べていると結構同じ事を思っている人が多いみたいでStack Overflowとかで結構みつかりました。

基本的にどれもイベントを拾ってオフセットとって指定という流れなのですが

stackoverflow.com

の中でBlend SDKに付属しているBehaviorを使って実装しているサンプルがありました。

以下、上記URLのサンプルとほとんど同じなのですが、やり方としては

System.Windows.Interactivity.Behavior<T>

を継承したクラスを作成します。

あとは、PopupにBehaviorを設定すればOK。BlendからだとDragPopupBehaviorをマウスでドラッグするだけです。

<i:Interaction.Behaviors>
  <local:DragPopupBehavior/>
</i:Interaction.Behaviors> 

以下、サンプルです。

WPFDraggablePopup (ドラッグ可能なポップアップ)

同じ流れで、PlacementTargetに追随するBehaviorも作れますね。Blend SDK便利。

WPFFollowPopup (PlacementTargetに追随するポップアップ)

stackoverflow.com


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。