【发布时间】:2010-12-28 04:29:49
【问题描述】:
我正在动态加载页面上的元素(读取 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 );
我想在这个StackPanel 上添加一个ContextMenu(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 部分来执行此操作,但收到错误消息“一个属性元素不能是另一个属性元素的直接子元素”
提前感谢您的帮助
【问题讨论】:
标签: windows-phone-7 contextmenu silverlight-toolkit