2013-11-22 4 views
0

내 실버 라이트 응용 프로그램에서 런타임에 이러한 작업을 수행하기 위해 노력하고있어 실버 라이트 이미지 컨트롤에의 ContextMenu를 추가 :런타임

1은 그 중 하나에 대한 사용자 지정의 ContextMenu를 정의 이미지 2의 목록을 만들 내 코드 다음과 같이 :

void AddImageViewerToGridCells(Grid g) 
    { 
     for (int i = 1; i <= g.RowDefinitions.Count; i++) 
      for (int j = 1; j <= g.ColumnDefinitions.Count; j++) 
      { 
       var b = new Image(); 
       b.Source = new BitmapImage(new Uri(@"Drop.jpg", UriKind.Relative)); 
       b.SetValue(Image.NameProperty, "img" + i.ToString() + "_" + j.ToString());      
       b.Stretch = Stretch.Fill; 
       b.SetValue(Grid.RowProperty, i-1); 
       b.SetValue(Grid.ColumnProperty, j-1); 
       b.MouseRightButtonDown += b_MouseRightButtonDown; 
       g.Children.Add(b); 
      } 
    } 

void b_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     Image img = (Image)sender; 
     ContextMenu cm = new ContextMenu(); 
     MenuItem mi1 = new MenuItem(); 
     mi1.Header = "Add To List"; 
     mi1.Click += mi1_Click; 
     cm.Items.Add(mi1); 
     MenuItem mi2 = new MenuItem(); 
     mi2.Header = "Remove From List"; 
     cm.Items.Add(mi2); 
     ContextMenuService.SetContextMenu(img, cm); 
    } 

부 ContextMenu가 보이지 않습니다. DependencyObject를 SetContextMenu 메서드에 전달해야한다는 것을 알기 때문에 (다만 추측에 따라) 런타임 컨트롤은 종속성 개체가 아닙니다. 어떤 도움

감사 나 응답하지 않습니다에 대한

답변

0

감사합니다! 용액은 다음과 같습니다.

void AddImageViewerToGridCells(Grid g) 
    { 
     for (int i = 1; i <= g.RowDefinitions.Count; i++) 
      for (int j = 1; j <= g.ColumnDefinitions.Count; j++) 
      { 
       var b = new Image(); 
       b.Source = new BitmapImage(new Uri(@"Drop.jpg", UriKind.Relative)); 
       b.SetValue(Image.NameProperty, "img" + i.ToString() + "_" + j.ToString());      
       b.Stretch = Stretch.Fill; 
       b.SetValue(Grid.RowProperty, i-1); 
       b.SetValue(Grid.ColumnProperty, j-1); 
       ContextMenu cm = new ContextMenu(); 
       ContextMenuService.SetContextMenu(b, cm); 
       cm.Opened+=cm_Opened; 
       //b.MouseRightButtonDown += b_MouseRightButtonDown; 
       g.Children.Add(b);      
      } 
    } 

    void cm_Opened(object sender, RoutedEventArgs e) 
    { 
     ContextMenu cm = (ContextMenu)sender; 
     cm.Items.Clear(); 
     MenuItem mi1 = new MenuItem(); 
     mi1.Header = "Add To List" + DateTime.Now.ToString(); 
     mi1.Click += mi1_Click; 
     cm.Items.Add(mi1); 
     MenuItem mi2 = new MenuItem(); 
     mi2.Header = "Remove From List" + DateTime.Now.ToString(); 
     cm.Items.Add(mi2); 
    }