سؤال

وأنا بحاجة لاظهار برمجيا / إخفاء MENUITEM، ما يمكن أن يكون أفضل طريقة للقيام بذلك؟

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

المحلول

حسنا، لإضافة MENUITEM عليك شيء على طول هذه الخطوط:

var menuItem = new MenuItem() { Header = "Menu Name", Name = "Identifier", IsCheckable = true, IsChecked = visible };
menuItem.Click += new RoutedEventHandler(contextMenu_onClick);
int position = contextMenu.Items.Add(menuItem);

(ولكن ربما كنت قد حصلت بالفعل هذا).

وسوف تحتاج بعض سيلة لربط عنصر القائمة إلى الخاصية - ولكن دون رؤية طلبك لا أستطيع أن أقترح حقا أفضل وسيلة. هناك خاصية العلامات التي يخزن كائن. الملكية رمز المستخدم الذي يقوم بتخزين السلسلة؛ الخاصية اسم الذي يخزن أيضا سلسلة.

وعلى الرغم:

menuItem.Visibility = Visibility.Visible;

و

menuItem.Visibility = Visibility.Collapsed;

ويجب تبديل وضوح في هذا البند.

تعديل: هل تستخدم انهارت سوف إخفاء عنصر القائمة وعدم حجز مساحة في القائمة - أنت لا تريد حقا مسافات فارغة في قائمة السياق. (بفضل Botz3000 لهذا)

وبعد ذلك في التعليمات البرمجية حيث يتم تغيير قيمة العقار عليك العثور على العنصر القائمة التي ترغب في اظهار / اخفاء باستخدام الربط وصفتها أعلاه. وبمجرد الانتهاء من هذا البند يمكنك التبديل انها قيمة:

menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;

نصائح أخرى

هل أنت متأكد أنك تريد إخفاء MenuItem؟ وهو أكثر شيوعا لتعطيله، وذلك باستخدام إطار قيادي WPF في:

<MenuItem Header="_MenuName" Command="{x:Static local:MyCommands.SomeCommand}" />

...

<!-- In the menu item or any of its ancestors: -->
<SomeControl.CommandBindings>
    <CommandBinding Command="{x:Static local:MyCommands.SomeCommand}" Executed="Save_Executed" CanExecute="Save_CanExecture" />
</SomeControl.CommandBindings>

وWPF سوف تستخدم bool نتيجة Save_CanExecute لتحديد ما إذا كان الأمر MenuItem يمكن تنفيذ في الوقت الراهن، وتمكين / تعطيل MenuItem وفقا لذلك.

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