سؤال

N. B هذا السؤال تم تحديث قراءة مزيد من أسفل

مرحبا ،

أريد إنشاء مخصص قائمة السياق أن لديه 4 القوائم الفرعية ، كل في بلدهم رباعي (أعلى يسار, أعلى اليمين, أسفل اليسار أسفل اليمين).على غرار ستوديو ماكس 3ds.

هذه هي الطريقة لقد اقترب قضية حتى الآن:- إنشاء مخصص WPF السيطرة ، مستمدة من ContextMenu[1]
- تعلن 4 التبعية خصائص ContextMenu ، سوف تكون هذه القوائم المعروضة و يمكن تعيين من XAML.
- AddOwner إلى ContextMenu.IsOpenProperty ، إضافة خاصية تغيير إشعار.
- عندما لبرنامج isopen تغييرات الخاصية تعيين لبرنامج isopen المنشأة من 4 الطفل قوائم السياق.
- استخدام ContextMenuService مجموعة العمودي والأفقي إزاحة من قوائم السياق لجعلها تظهر في كل رباعي;ملزمة الفعلية الطول والعرض خصائص لحساب التعويضات.

[1] ضرورة أن تستمد من قائمة السياق خلاف ذلك لا يمكنك تعيين إلى ContextMenu الملكية على النافذة.

هذا يظهر إلى العمل ، هناك قضايا مع القوائم لا البقاء مفتوحة (يتم إغلاقه كما يتم التركيز خارج القائمة) ولكن أنا متأكد من استخدام Reflector.NET تجد طريقة للالتفاف حول هذا.

هذا هو بلدي الأول مخصص WPF التحكم التي حاولت الكتابة ؛ و لست متأكدا إذا كان هذا هو أفضل نهج.

أي اقتراحات أو أفكار حول كيفية إنشاء هذه رباعية السياق القائمة ؟

هل كانت مفيدة؟

المحلول 2

التحديث

موافق.بعد ان لعب حولها مع عناصر التحكم المخصصة لدي شيء العمل أفضل من ذي قبل.جميع القوائم الآن تبقى مفتوحة.

ما قمت به:
- إنشاء عنصر التحكم المخصص اسمه QuadContextMenu المستمدة من ContextMenu تجاوز النمط الافتراضي الرئيسية.
- نمط التحكم 4 المنبثقة الأوليات:
- مع كل PART_ اسم لذلك أنا الحصول على مرجع لهم عند OnApplyTemplate.
- كل الأطفال QuadMenu ، والتي يتم التحكم المخصصة المستمدة من MenuBase.
- لكل VerticleOffset و HorizontalOffset خصائص ملزمة ActualHeight و ActualWidth الطفل [2].

QuadMenu نمط/التحكم في القالب:
- لديه الكلاسيكية الحدود مع dockpanel ، الحدود مع textblock لوضع اسم القائمة.

[2] كيفية وضع القوائم في رباعية:- TopLeft يقابل السلبية الفعلية العرض والارتفاع
- TopRight يقابل السلبية الفعلية ارتفاع
- BottomLeft يقابل السلبية الفعلية ارتفاع
- BottomRight هو لا ويقابل هو في موقعه الأصلي

alt text

أسئلة جديدة/قضايا

هذه هي التحديات المقبلة إلى جعل هذا التحكم:
1.في هذه اللحظة لوحة المفاتيح و الماوس مؤمن/القبض عليه من قبل القائمة الأولى تركز على الآخرين لا تتوفر من قبل تحوم فوقها.مما يعني أنه يمكنك استخدام فقط 1 من القوائم.
2.الوجه MenuItem التي TopLeft/BottomLeft القائمة الفرعية يفتح على الجانب الأيسر.

لقد حاول استبدال عنصر القائمة من خلال تجاوز GetContainerForItemOverride طرق العودة QuadMenuItem.QuadMenuItem هو عنصر تحكم مخصص مستمدة من MenuItem.عندما أفعل هذا ومع ذلك خسرت الفرعية الوظائف التي أمر محبط.

إذا كان أي شخص لديه أي نصيحة/الحيل/اقتراحات حول كيفية معالجة هذه القضايا سيكون موضع تقدير كبير!:D شكرا

نصائح أخرى

أستطيع أن أفكر في نهجين لا أحد بالضرورة أن نظيفة ولكن لديه القدرة على أن العمل إذا كان لديك الوقت.

النهج 1

استخدام قائمة السياق ولكن من خلال وضع القالب تجعل من ذلك أن ContextMenu حقا فقط يظهر عنصر التحكم الذي يحدث لفتح النوافذ الأخرى.ربما الحيل يمكن القيام به بحيث افتتاح هذه الثانوية القوائم لا يأخذ التركيز بعيدا.قد ينتهي هذا الأمر لا يزال يسبب المشكلة الأصلية.

نهج 2

ماذا يحدث إذا قمت بتعيين ContextMenu.StaysOpen إلى false ثم محاولة السيطرة عندما القائمة يغلق نفسك ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top