2

注意: この質問は更新されています。さらに下をお読みください。

やあ、

それぞれが独自の象限 (左上、右上、左下、右下) にある 4 つのサブメニューを持つカスタム コンテキスト メニューを作成したいと考えています。3ds Studio Max に似ています。

これは私がこれまでに問題に取り組んだ方法です: - カスタム WPF コントロールを作成し、ContextMenu[1] から派生させます
- ContextMenu の 4 つの依存関係プロパティを宣言します。これらは表示されるメニューになり、XAML から設定できます。
- ContextMenu.IsOpenProperty に AddOwner、プロパティ変更通知を追加。
- IsOpen プロパティが変更された場合、4 つの子コンテキスト メニューの IsOpen プロパティを設定します。
- ContextMenuService を使用して、コンテキスト メニューの垂直オフセットと水平オフセットを設定し、各象限に表示します。実際の高さと幅のプロパティをバインドしてオフセットを計算します。

[1] コンテキスト メニューから派生する必要があります。そうしないと、ウィンドウの ContextMenu プロパティに割り当てることができません。

これは機能しているように見えますが、メニューが開いたままにならないという問題があります(フォーカスがメニューの外にあるため、メニューが閉じられています) が、Reflector.NET を使用してこれを回避できると確信しています。

これは、私が作成しようとした最初のカスタム WPF コントロールです。これが最善のアプローチであるかどうかはわかりません。

このクワッド コンテキスト メニューの作成方法に関する提案/アイデアはありますか?

4

2 に答える 2

2

2 つのアプローチを考えることができます。どちらも必ずしもクリーンではありませんが、時間があれば機能する可能性があります。

アプローチ1

コンテキスト メニューを使用しますが、テンプレートを設定することで、ContextMenu が他のウィンドウを開くコントロールを実際に表示するようにします。おそらく、これらの二次メニューを開いてもフォーカスが失われないようにするためのトリックを行うことができます。これにより、元の問題が引き続き発生する可能性があります。

アプローチ 2

ContextMenu.StaysOpen を false に設定し、メニューを閉じるタイミングを自分で制御しようとするとどうなりますか?

于 2009-03-29T22:22:42.517 に答える