Если Вы только хотите быть техническим специалистом и программами записи, чтобы сделать вещи, то Вы не должны действительно знать лямбда-исчисление, конечные автоматы, автоматы с магазинной памятью, регулярные выражения, контекстно-свободную грамматику, дискретную математику, и т.д.
, Но если у Вас есть любопытство о более глубоких тайнах, лежащих в основе этого материала, можно начать задаваться вопросом, как на эти вопросы можно было бы ответить. Понятия красивы и развернут Ваше воображение. Я также думаю, что они, несущественно, делают один лучшим practicioner.
то, Что получило меня сцепленный, было книгой Minsky Вычисление: Конечные и Бесконечные автоматы.
это даст Вы именно то, что хотите
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;
}
}
Надеюсь, это поможет !!
контекстное меню имеет собственное визуальное дерево, попробуйте вызвать его из обработчика событий следующим образом: -
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;
}