如题, 用下面的代码添加的效果, 是菜单前面显示 "(Icon)", 而不是图标..MenuItem item = new MenuItem();
item.Header = "新建项";
menu.Items.Insert(0, item);
item.Icon = System.Drawing.Icon.ExtractAssociatedIcon("...");
如果将 Icon 设置为磁盘上的某图标文件, 菜单前面显示的就是那文件的路径, 也不是图标.项目目标框架是 Framework 3.5

解决方案 »

  1.   

    ExtractAssociatedIcon返回的就是Icon类型.TO colinfang2006:
    请看代码下面的一行说明. 如果保存成图片再设置在图标, 就会显示 "X:\...\..ico" 了
      

  2.   

    MenuItem的Icon必须是个Image对象,由Image加载图像...既然是WPF,就别把Winform那套往里套...
      

  3.   

    受教了, 不是我非得用winform那套, 只是 MenuItem的Icon类型显示为object, 而没有明确指定是Image类型. 不知楼上如何看出用的是winform那套?
      

  4.   

    不知道你为什么非要写code-behind。其实最好将UI部分的东西声明在xaml里。
      

  5.   

     
    vrhero
    说的意思是用xaml来做这件事,UI在wpf中用xaml好
      

  6.   

    我当然知道用xaml比较好, 简单省事不过偏偏我要的菜单就是动态生成的, 上面我只贴出了部分跟图标相关的代码, 还有另外菜单相关数据的获取及处理的代码已经省略...一个注册表项里面有若干个程序的路径及对应的程序名称, 如
    名称:Adobe Fireworks CS5, 类型:REG_SZ, 值:D:\Adobe\Adobe Fireworks CS5\Fireworks.exe
    我要实现的功能就是, 取出每一条数据, 生成一个菜单项, 前面有对应程序的图标, 点击可以执行该程序
    private void CreateMenu()
    {
    RegistryKey list = setting.OpenSubKey("ProgramList");
    if (list == null) return; foreach (string prog in list.GetValueNames())
    {
    MenuItem item = new MenuItem {
    Header = prog,
    Tag = list.GetValue(prog),
    Icon = Helper.GetExeIcon(list.GetValue(prog).ToString())
    };
    item.Click += new RoutedEventHandler(OpenWith);
    menu.Items.Insert(0, item);
    }
    }
    GetExeIcon如下:static public Image GetExeIcon(string exeName)
    {
    System.IO.MemoryStream men = new System.IO.MemoryStream();
    System.Drawing.Icon.ExtractAssociatedIcon(exeName).Save(men);
    return new Image { Source = new BitmapImage { StreamSource = men } };
    }
    不知以上代码有什么问题, 请大神赐教