Получите владельца контекстного меню в коде

Если Вы только хотите быть техническим специалистом и программами записи, чтобы сделать вещи, то Вы не должны действительно знать лямбда-исчисление, конечные автоматы, автоматы с магазинной памятью, регулярные выражения, контекстно-свободную грамматику, дискретную математику, и т.д.

, Но если у Вас есть любопытство о более глубоких тайнах, лежащих в основе этого материала, можно начать задаваться вопросом, как на эти вопросы можно было бы ответить. Понятия красивы и развернут Ваше воображение. Я также думаю, что они, несущественно, делают один лучшим practicioner.

то, Что получило меня сцепленный, было книгой Minsky Вычисление: Конечные и Бесконечные автоматы.

27
задан Dave Clemmer 5 September 2011 в 18:12
поделиться

2 ответа

это даст Вы именно то, что хотите

private void OnDeleteClicked(object sender, System.Windows.RoutedEventArgs e)
{
    MenuItem mnu = sender as MenuItem;
    StackPanel sp = null;
    if(mnu!=null)
    {
        sp = ((ContextMenu)mnu.Parent).PlacementTarget as StackPanel;
    }
}

Надеюсь, это поможет !!

55
ответ дан 28 November 2019 в 04:43
поделиться

контекстное меню имеет собственное визуальное дерево, попробуйте вызвать его из обработчика событий следующим образом: -

StackPanel stackPanel = GetStackPanelItemFromContextMenu((FrameworkElement)sender, yourStackPanel);

  private StackPanel GetStackPanelItemFromContextMenu(FrameworkElement sender, StackPanel stackPanel) {
     Point menuClickPoint = ((sender as FrameworkElement).Parent as ContextMenu).TranslatePoint(new Point(0, 0), stackPanel);

     // get the first potential object that was hit   
     DependencyObject obj = stackPanel.InputHitTest(menuClickPoint) as DependencyObject;

     // cycle up the tree until you hit the StackPanel
     while (obj != null && !(obj is StackPanel)) {
        obj = VisualTreeHelper.GetParent(obj);
     }

     return obj as StackPanel;
  }
1
ответ дан 28 November 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: