我正在动态加载页面上的元素(读取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
部分添加上下文菜单来做到这一点,但得到一个错误,说“属性元素不能是另一个属性元素的直接子元素”
提前感谢您的帮助
答案 0 :(得分:9)
ContextMenuService.SetContextMenu(sp, cm);