2013-07-08 11 views
0

에 ContextMenu MenuItems를 계속 추가하면 컨텍스트 메뉴에 메뉴 항목을 추가 할 수 있습니다. 한 번 이상 클릭하면 상황에 맞는 메뉴 항목을 계속 추가 할 수 있습니다. 여기에 아래 코드가 있습니다. 코드를 사용하고클릭 이벤트에서 클릭 이벤트

<StackPanel Grid.Row="13" Orientation="Horizontal" FlowDirection="LeftToRight"> 
            <Button Name="btnMobile" Content="Home" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0 0 20 0" Width="70"></Button> 
            <!--<extToolkit:DropDownButton x:Name="ddBtnMobile" VerticalAlignment="Top" Width="30" HorizontalAlignment="Right" Margin="0 0 30 0" Height="20"/>--> 
            <Button HorizontalAlignment="Left" Name="ddBtnMobile" Width="30" Click="OnddBtnMobileClick" Margin="0,0,0,5" > 
             <Button.Content> 
              <Path x:Name="btnArrow3" Margin="4" VerticalAlignment="Center" Width="10" Fill="#FF527DB5" Stretch="Uniform" HorizontalAlignment="Right" Data="F1 M 301.14,-189.041L 311.57,-189.041L 306.355,-182.942L 301.14,-189.041 Z "/> 
             </Button.Content> 
             <Button.ContextMenu> 
              <ContextMenu Name="cMenu"> 

              </ContextMenu> 
             </Button.ContextMenu> 
            </Button> 
           </StackPanel> 

은 위의 논리를 작성하는 더 좋은 방법이 있나요 .. 내 문제를 해결하는 방법

 private void OnddBtnMobileClick(object sender, RoutedEventArgs e) 
       { 
        mnItem = new MenuItem(); 
        mnItem.Header ="B1"; 
        cMenu.Items.Add(mnItem); 
        mnItem = new MenuItem(); 
        mnItem.Header ="A1"; 
        cMenu.Items.Add(mnItem); 
        mnItem = new MenuItem(); 
        mnItem.Header="B 2"; 
        cMenu.Items.Add(mnItem); 
cMenu.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(OnMenuItemClick)); 
       } 

    private void OnMenuItemClick(object sender, RoutedEventArgs e) 
       { 
        RoutedEventArgs args = e as RoutedEventArgs; 
        MenuItem item = args.OriginalSource as MenuItem; 
        string header = item.Header.ToString(); 
        if (header == "Business") 
        { 
         btnMobile.Content = header; 
        } 
        else if (header == "Assistant") 
        { 
         btnMobile.Content = header; 
        } 

       } 

이하입니다. 즉 런타임에 컨텍스트 메뉴의 메뉴 항목을 추가합니다.

답변

0

는의이었다 하위 메뉴가 이미 응답을

private void OnddBtnMobileClick(object sender, RoutedEventArgs e) 
{ 
    if(alreadyAdded == true) 
     return; 

    alreadyAdded = true; 
    mnItem = new MenuItem(); 
    mnItem.Header ="B1"; 
    cMenu.Items.Add(mnItem); 
    mnItem = new MenuItem(); 
    mnItem.Header ="A1"; 
    cMenu.Items.Add(mnItem); 
    mnItem = new MenuItem(); 
    mnItem.Header="B 2"; 
    cMenu.Items.Add(mnItem); 
    cMenu.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(OnMenuItemClick)); 
} 
+0

감사를 추가 한 경우 확인하는 부울 데이터 멤버를 추가 ... 내가 한 번 더 의심의 여지가 ... OnMenuItemClick 이벤트 핸들러 방법 특정 btnmname을 식별 할 수 있습니다. 왜냐하면 3 버튼에 대해 동일한 메소드 및 이벤트 핸들러를 사용하고 싶습니다. 어떤 생각을 제안 할 수 있습니까? 이렇게하려면? – kida

+0

@kida 보낸 사람 개체는 클릭 한 버튼이며, Button으로 캐스팅하고 이름을 확인할 수 있습니다. – makc

0

버튼 클릭 이벤트가 시작될 때 다음 코드를 추가하십시오.

cMenu = new cMenu(); 

새로운 인스턴스를 만들어야합니다.

감사합니다,