Добавление WP7 ContextMenu программно - PullRequest
4 голосов
/ 28 декабря 2010

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

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 );

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

    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?

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

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

1 Ответ

9 голосов
/ 28 декабря 2010
ContextMenuService.SetContextMenu(sp, cm);
...