Pregunta

Necesito mostrar / ocultar programáticamente un MenuItem, ¿cuál sería la mejor manera de hacer esto?

¿Fue útil?

Solución

Bueno, para agregar un MenuItem necesitará algo en este sentido:

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);

(pero probablemente ya tienes esto).

Necesitará alguna forma de vincular el elemento del menú a la propiedad, pero sin ver su aplicación, realmente no puedo sugerir la mejor manera. Existe la propiedad Tag que almacena un objeto; la propiedad Uid que almacena una cadena; la propiedad Nombre que también almacena una cadena.

Mientras:

menuItem.Visibility = Visibility.Visible;

y

menuItem.Visibility = Visibility.Collapsed;

debería alternar la visibilidad del elemento.

EDITAR: el uso de Contraer ocultará el elemento del menú y no reservará espacio en el menú; realmente no desea espacios en blanco en un menú contextual. (gracias a Botz3000 por esto)

Luego, en su código donde se cambia el valor de la propiedad, encontrará el elemento del menú que desea mostrar / ocultar utilizando el enlace que describí anteriormente. Una vez que tenga el artículo, puede cambiar su valor:

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

Otros consejos

¿Estás seguro de que quieres ocultar el MenuItem? Es más común deshabilitarlo, utilizando el marco de mando de 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 usará el resultado bool de Save_CanExecute para determinar si el comando de <=> puede ejecutarse actualmente, y habilitará / deshabilitará el <=> en consecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top