كيف يمكنني مشاركة تعريف القائمة بين قائمة السياق والقائمة العادية في WPF
سؤال
لدي عنصر قائمة محدد أرغب في مشاركته بين قائمتين مختلفتين في صفحة واحدة.تحتوي القائمة على وظائف هي نفسها بين القائمتين ولا أريد نسختين منها.هل هناك أي طريقة لتحديد MenuItem في Page.Resources والإشارة إليه في contextMenu XAML أدناه؟
<Page.Resources>
<MenuItem x:Key="123"/>
</Page.Resources>
<ContextMenu>
<MenuItem>Something hardcoded</MenuItem>
<!-- include shared menu here -->
</ContextMenu>
المحلول
لقد قمت بذلك عن طريق تعيين x:Shared="False" على عنصر القائمة نفسه.تتم مشاركة الموارد بين كل مكان يستخدمها بشكل افتراضي (أي مثيل واحد عبر جميع الاستخدامات)، وبالتالي فإن إيقاف ذلك يعني إنشاء "نسخة" جديدة من المورد في كل مرة.
لذا:
<MenuItem x:Key="myMenuItem" x:Shared="False" />
ستظل تحصل على "نسخة" منها، لكن ما عليك سوى تحديدها في مكان واحد.معرفة ما إذا كان ذلك يساعد.يمكنك استخدامه على هذا النحو ضمن تعريف القائمة الخاصة بك:
<StaticResource ResourceKey="myMenuItem" />
نصائح أخرى
لأنك تريد المزج والتوافق..سأقوم بإنشاء عنصر تحكم مخصص يرث من contextMenu الذي يحتوي على خاصية التبعية "SharedMenuItems" وخاصية التبعية MenuItems.بهذه الطريقة يمكن لعنصر التحكم الخاص بك أن يقرر كيفية دمج هاتين المجموعتين معًا.إذا كنت ترغب في مثال على ذلك، واسمحوا لي أن أعرف.
عدد من الخيارات:أ) Databind the ContextMenu أو القائمة إلى نفس المجموعة الأساسية واستخدام قوالب العناصر et al إلى العمل ب) استخدام الأوامر ، و databind إلى مجموعة من روابط الأوامر