繁体   English   中英

来自包装面板WPF中的自定义控件的ContextMenu

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM