Potrzebuję programowo pokazać/ukryć MenuItem, jaki byłby najlepszy sposób to zrobić?WPF hide MenuItem na ContextMenu na podstawie właściwości obiektu
Odpowiedz
Dobrze, aby dodać MenuItem trzeba coś wzdłuż tych linii:
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);
(ale prawdopodobnie już dostał ten temat).
Będziesz potrzebował jakiegoś sposobu związania pozycji z menu z nieruchomością - ale nie widząc twojego wniosku, nie mogę zaproponować najlepszego sposobu. Istnieje własność Tag, która przechowuje obiekt; właściwość Uid, która przechowuje ciąg; właściwość Name, która również przechowuje ciąg znaków.
Podczas:
menuItem.Visibility = Visibility.Visible;
i
menuItem.Visibility = Visibility.Collapsed;
należy przełączyć widoczność elementu.
EDYCJA: Korzystanie ze zwiniętego elementu spowoduje ukrycie pozycji menu, a nie zarezerwowanie miejsca w menu - w menu kontekstowym naprawdę nie ma pustych miejsc. (dzięki Botz3000 za to)
Następnie w swoim kodzie, gdzie wartość nieruchomości zostanie zmieniona, znajdziesz pozycję menu, którą chcesz pokazać/ukryć za pomocą opisanego powyżej sprzężenia. Gdy masz pozycję można przełączać jego wartość:
menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
Czy na pewno chcesz ukryć MenuItem
? To jest bardziej powszechne, aby ją wyłączyć za pomocą ramy WPF jest imponujący:
<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 użyje bool
wynik Save_CanExecute
celu ustalenia, czy komenda MenuItem
„s można obecnie wykonywać i włączyć/wyłączyć MenuItem
odpowiednio.
nie będzie widoczność.Collapsed być lepszy? – Botz3000
Dzięki - zaktualizowałem odpowiedź – ChrisF