以编程方式添加WP7 ContextMenu

时间:2010-12-28 04:29:49

标签: windows-phone-7 contextmenu silverlight-toolkit

我正在动态加载页面上的元素(读取XML文件的内容)。动态内容将加载到StackPanel中。内容的每个元素都包含TextBlock和另外一个UI元素,因此对于每对,我创建一个新的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添加上下文菜单?

此外,有没有更好的方法来解决这个问题?也许通过在XAML资源部分中存储2种不同类型的上下文菜单并根据需要添加它们?我尝试通过向父级StackPanel.Resource部分添加上下文菜单来做到这一点,但得到一个错误,说“属性元素不能是另一个属性元素的直接子元素”

提前感谢您的帮助

1 个答案:

答案 0 :(得分:9)

ContextMenuService.SetContextMenu(sp, cm);
相关问题