2010-01-15 5 views

답변

4

코드 뒤에서 코드를 작성하는 것이 훨씬 쉽습니다. 이 방법을 확인하면, 샘플 코드의 매우 쉬운 조각 : 분명히

ContextMenu cm = new ContextMenu(); 

cm.Items.Clear(); 
MenuItem mi; 


mi = new MenuItem(); 
mi.Header = "myHeader"; 
mi.Click += new RoutedEventHandler(menuItemAlways_Click); 
cm.Items.Add(mi); //this item will always show up 

if(someCondition()) 
{ 
    mi = new MenuItem(); 
    mi.Header = "myConditionalHeader"; 
    mi.Click += new RoutedEventHandler(menuItemConditional_Click); 
    cm.Items.Add(mi); //This item will show up given someCondition();  
} 

cm.IsOpen = true; 

아주 단순한 예,하지만 그것은 뒤에 코드에서 수행하는 것이 얼마나 쉬운 지 보여줍니다.

편집 : 귀하의 코멘트에 대한 답변에서, 여기 좀 명확하게해야 내가 마지막으로 사용되는 방법 ...

//raised upon an event, ie. a right click on a given control 
private void DisplayContextMenu(object sender, MouseButtonEventArgs e) 
{ 
    ContextMenu cm = GetAssetContextMenu() 
    //Method which builds context menu. Could pass in a control (like a listView for example) 

    cm.IsOpen = true; 
} 

private ContextMenu GetContextMenu() 
{ 
    ContextMenu cm = new ContextMenu(); 
    //build context menu 
    return cm; 
} 

입니다. 분명히 GetContextMenu() 메소드는 어떤 종류의 prorgam 상태를 가져올 수있는 매개 변수를 취할 것입니다. 예를 들어 listView를 클릭하면 "listView.SelectedItem"에 대한 값을 얻을 수 있습니다. 조건부 컨텍스트 메뉴를 빌드하십시오. 나는 이것이 분명해지기를 희망하며, 나는 지금 조금 안개가 낀다.

+0

코드 예를 보내 주셔서 감사합니다! 이 생성 된 컨텍스트 메뉴를 페이지의 특정 객체에 연결하는 방법을 알려주십시오. – rem

+0

XAML에서 빈 ContextMenu를 만들고 "ContextMenuOpening"이벤트 핸들러에서 메뉴 항목을 만들어야합니까? – rem

+0

감사합니다. MouseRightButtonDown 이벤트에서 열리는 상황에 맞는 메뉴가 잠깐 동안 열리고 왜 깜박 거리는 지 말해 주시겠습니까? "cm.IsOpen = true;"이외에 무엇을해야합니까? – rem

1

나는 동적 "ContextMenuOpening"이벤트에 코드 숨김 내 상황에 맞는 메뉴를 구축 할 수 있습니다. 그것은 아주 잘 작동합니다. 이렇게하면 모든 변수를 실시간으로 볼 수 있습니다. 나는 일반적으로 매번 필요한 모든 것을 가지고있는 상황에 맞는 메뉴를 만든 다음 그것을 보여주기 전에 코드에서 수정한다. 몇 가지 코드를 게시 하겠지만 독점적입니다.

관련 문제