1

わかりました、ポップアップを使用してこれを機能させようとしましたが、それが私が取りたいルートではないように見える理由はたくさんあります...特に、過去2時間かけて試してみたためですそれを機能させると、私はそれがすべての地獄よりも不潔だと考えました(これは、アプリの他の場所に問題なく機能するポップアップがあるという事実にもかかわらずですが、余談です...)

基本的に、WPF の標準の標準ではないように見える機能が 1 つだけ必要です...誰かが既知の UI 要素以外の何かをクリックしたときを判断する必要があります (つまり、何かから離れてクリックして閉じる...StaysOpen = false に設定されたポップアップのように)

私が集めたものから、これは非常に骨の折れる作業であり、これを行うための最良の方法について直接的な答えを見つけることができないようです...何かアイデアはありますか?

編集:

コメンターの 1 人が、サンプル コードを投稿して、私の質問を読み直してほしいと言いました。関係のないもの (XY 問題) を投稿したくありません。この質問を投稿する理由は 2 つあります。

  1. ポップアップが開くとすぐに onmouseleave イベントが発生します。これは、ポップアップが「StaysOpen="False"」に設定されている場合、ポップアップが表示され、何があってもすぐに消えることを意味します。ポップアップに配置するのではなく、Visibility 属性を使用して表示および非表示にするコンポーネントを作成する場合、これは問題にならないと心から信じています。私が popup コンポーネントを検討した唯一の理由は、StaysOpen=False 機能のためであり、他のすべての上に浮かぶ必要があるからではありません。

  2. ポップアップ自体は、特にビジュアル ツリーの親コンポーネント内に収まる必要があるため、非常にハッキリしています。以下のコードからわかるように、ポップアップを親の中に収まるようにしました...しかし、コンポーネントの幅と高さを別のコンポーネントの実際の幅と高さにバインドするのは本当に好きではありません。これが、ポップアップの使用を避けたい 2 つ目の理由です。

その結果、この質問は「ポップアップを機能させるにはどうすればよいか」ということになるかもしれませんが、元の質問は依然として「オン クリックアウェイイベントをリッスンするにはどうすればよいですか?」ということになります。ビジュアル ツリーに論理的に適合し、次のように動作するコンポーネントを作成したいと考えています。

  1. コンポーネントにカーソルを合わせると、
  2. 放置するとコンポーネントが消える
  3. コンポーネントをクリックすると、表示され続ける
  4. コンポーネントまたはそれ自体から離れた場所をクリックすると閉じる

クリックした場合を除いて、上記のすべてを処理しました

4

2 に答える 2

1

UIElement.LostFocus-Eventはどうですか? それはあなたが必要とするもののようです。

于 2013-08-21T01:42:16.557 に答える