كيف يمكنني مشاركة تعريف القائمة بين قائمة السياق والقائمة العادية في WPF

StackOverflow https://stackoverflow.com/questions/150150

  •  02-07-2019
  •  | 
  •  

سؤال

لدي عنصر قائمة محدد أرغب في مشاركته بين قائمتين مختلفتين في صفحة واحدة.تحتوي القائمة على وظائف هي نفسها بين القائمتين ولا أريد نسختين منها.هل هناك أي طريقة لتحديد 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 إلى مجموعة من روابط الأوامر

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