2013-10-28 6 views
0

У меня есть набор узлов, и я создаю изображение для представления каждого из них в форме WPF.Получите доступ к родительскому элементу при нажатии ContextMenu WPF

 BitmapImage src = new BitmapImage(); 
     src.BeginInit(); 
     src.UriSource = new Uri("pack://application:,,,/WpfApplication1;component/Resources/Node.png", UriKind.Absolute); 
     src.CacheOption = BitmapCacheOption.OnLoad; 
     src.EndInit(); 

     foreach (var item in nodeList) 
     { 
      Image newImage = new Image(); 
      newImage.Margin = new Thickness(item.Position.X , item.Position.Y , 0, 0); 
      newImage.Source = src; 
      Canvas1.Children.Add(newImage); 
      newImage.MouseRightButtonDown += newImage_MouseRightButtonDown; 
     } 

Мой делегат создает ContextMenu для каждого изображения, помещенного в форму.

void newImage_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     ContextMenu menu = new ContextMenu(); 

     int index = Canvas1.Children.IndexOf((Image)sender); 

     MenuItem addExistingLink = new MenuItem(); 
     addExistingLink.Header = "Add Existing Link"; 
     addExistingLink.Click += submenu_Click; 

     MenuItem addNewLink = new MenuItem(); 
     addNewLink.Header = "Add New Link"; 
     addNewLink.Click += submenu_Click; 

     menu.Items.Add(addExistingLink); 
     menu.Items.Add(addNewLink); 
     menu.IsOpen = true; 
    } 

А затем передать для моего подменю Click события

void submenu_Click(object sender, RoutedEventArgs e) 
    { 

    } 

Как я могу получить доступ ко мое изображение при нажатии на этом контекстное меню?

Sender возвращает тип MENUITEM

 var item1 = sender; 

Это возвращает тип MainWindow

 var item2 = this; 

Parent возвращает тип ContextMenu

 var item3 = item1.Parent; 

ответ

0

Попробуйте поставить DataContext из ваших ContextMenu к объекту, который имеет доступ к Image:

ContextMenu menu = new ContextMenu(); 
menu.DataContext = this; 

Или:

ContextMenu menu = new ContextMenu(); 
menu.DataContext = this.DataContext; 

Я просто предполагаю здесь, но вы должны быть в состоянии работать, какой объект имеет доступ к управлению Image.

+0

'menu.DataContext = ((Image) sender);' вместо 'menu.DataContext = this;' – user2847238

+0

Спасибо за обновление ... так, это исправить вашу проблему? – Sheridan

+0

Мне пришлось добавить еще одну строку 'var item1 = ((MenuItem) отправитель) .DataContext;' 'Image item2 = ((Image) item1);' – user2847238

Смежные вопросы