WPF는 객체 속성을 기반으로 ContextMenu에 menuitem을 숨 깁니다
-
20-08-2019 - |
문제
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);
(그러나 당신은 이미 이것을 얻었을 것입니다).
메뉴 항목을 속성에 묶는 방법이 필요하지만 응용 프로그램을 보지 않으면 서 가장 좋은 방법을 제안 할 수는 없습니다. 객체를 저장하는 태그 속성이 있습니다. 문자열을 저장하는 UID 속성; 문자열을 저장하는 이름 속성.
하는 동안:
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
따라서.
제휴하지 않습니다 StackOverflow