[英]ContextMenu from a custom control in a wrap panel wpf
我有一个自定义控件AsGridItem
,这是一个自定义按钮,可以实用地创建并添加到WrapPanel
。 我需要帮助才能在其上完全实现上下文菜单,以便可以从数据库中删除引用的项,甚至可以打开新窗口或显示弹出窗口。
private void LoadItems(List<MyItems> items)
{
foreach (item in items)
{
AsGridItem asGrid = new AsGridItem();
asGrid.Title = item.Title;
asGrid.Icon = item.IconName;
asGrid.PackIcon = item.ContentType;
MenuItem editMenu1 = new MenuItem();
editMenu1.Header = "Open this Item";
editMenu1.Click += ItemOpen_Click;
MenuItem editMenu2 = new MenuItem();
editMenu2.Header = "Delete this Item";
editMenu2.Click += ItemDelete_Click;
MenuItem editMenu3 = new MenuItem();
editMenu3.Header = "View Properties";
editMenu3.Click += ItemProperties_Click;
ContextMenu contextMenu = new ContextMenu();
contextMenu.Items.Add(editMenu1);
contextMenu.Items.Add(editMenu2);
contextMenu.Items.Add(editMenu3);
asGrid.ContextMenu = contextMenu;
asGrid.Click += GridItem_Click;
ItemsList.Children.Add(asGrid);
}
}
private void GridItem_Click(object sender, RoutedEventArgs e)
{
AsGridItem asGrid = sender as AsGridItem;
OpenItem(asGrid);
}
private void ItemOpen_Click(object sender, RoutedEventArgs e)
{
AsGridItem asGrid = sender as AsGridItem;
OpenItem(asGrid);
}
我是将对象设置为空引用的错误,无法弄清楚该如何解决。
之所以得到空引用,是因为您使用的是应在应引用的菜单项上单击onclick的代码,而菜单项则在包装面板中单击了哪个项目的上下文菜单。
菜单项目>>上下文菜单>>项目
我只是修改了一些代码来实现这一点
private void ItemOpen_Click(object sender, RoutedEventArgs e)
{
//try to reference the menuItem first
MenuItem menuItem = (MenuItem)sender;
//then reference the contextmenu
ContextMenu contextMenu = (ContextMenu)menuItem.Parent;
// then your initial code can come in modfied like this
AsGridItem asGrid = (AsGridItem)contextMenu.PlacementTarget;
OpenItem(asGrid);
}
希望它能解决您的null参考错误问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.