2010-12-28 3 views
4

Я загружаю элементы на странице динамически (чтение содержимого XML-файла). Динамический контент загружается в StackPanel. Каждый элемент содержимого состоит из TextBlock и еще одного элемента пользовательского интерфейса, поэтому для каждой пары я создаю новый StackPanel, который затем добавляется к родительскому StackPanel. Код выглядит следующим образом:Добавление WP7 ContextMenu программно

TextBlock header = new TextBlock() { 
     Text = "Heading 1", 
     HorizontalAlignment = HorizontalAlignment.Stretch, 
     VerticalAlignment = VerticalAlignment.Top, 
     Foreground = (SolidColorBrush)Application.Current.Resources["PhoneAccentBrush"], 
     }; 
TextBox item = new TextBox() { 
     HorizontalAlignment = HorizontalAlignment.Stretch, 
     VerticalAlignment = VerticalAlignment.Top, 
     }; 
StackPanel sp = new StackPanel(); 
sp.Children.Add(header); 
sp.Children.Add(item); 

parentSP.Children.Add(sp); 

Я хочу добавить к этому ContextMenuStackPanel (sp, не parentSP); в зависимости от некоторых параметров, считанных из файла, это может быть одно из двух различных контекстных меню. Я попытался следующие, но он не работает:

ContextMenu cm = new ContextMenu(); 
    RoutedEventHandler clickHandler = new RoutedEventHandler(OnContextMenuClicked); 

    // Add "edit" entry 
    MenuItem menuItem = new MenuItem() { 
     Header = "edit", 
     Tag = "edit", 
    }; 

    menuItem.Click += clickHandler; 
    cm.Items.Add(menuItem); 

    // Add "delete" entry 
    menuItem = new MenuItem() { 
     Header = "delete", 
     Tag = "delete", 
    }; 

    menuItem.Click += clickHandler; 
    cm.Items.Add(menuItem); 

    parentSP.Children.Add(cm); 

Как добавить контекстное меню к StackPanel программно?

Кроме того, есть ли лучший способ решить эту проблему? Может быть, путем хранения двух различных типов контекстных меню в разделе ресурсов XAML и добавления их по мере необходимости? Я попытался сделать это, добавив контекстное меню для StackPanel.Resource секции родителя, но получил сообщение об ошибке сказав «Элемент свойство не может быть прямым потомком другого имущества элемента»

Заранее спасибо за помощь

ответ

9
ContextMenuService.SetContextMenu(sp, cm); 
+2

Would было приятно получить некоторые ответы на его другие вопросы тоже ... – swinefeaster

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