You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Template Studio WPF中HamburgerMenuIconItem/ImageItem使用问题求助

解决WPF HamburgerMenuIconItem和ImageItem的图标渲染问题

一、HamburgerMenuIconItem无法渲染System.Drawing.Icon的处理

HamburgerMenuIconItem的Icon属性要求的是WPF的ImageSource类型,而非WinForms的System.Drawing.Icon,直接赋值会导致无法渲染,需要先将Icon转换为WPF可识别的BitmapSource:

  1. 添加转换方法:
private BitmapSource ConvertIconToBitmapSource(System.Drawing.Icon icon)
{
    using (var stream = new MemoryStream())
    {
        icon.Save(stream);
        stream.Position = 0;
        var bitmapImage = new BitmapImage();
        bitmapImage.BeginInit();
        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapImage.StreamSource = stream;
        bitmapImage.EndInit();
        return bitmapImage;
    }
}
  1. 修改MenuItem的创建代码:
new HamburgerMenuIconItem() 
{ 
    Label = Resources.ShellListDetailsPage, 
    Icon = ConvertIconToBitmapSource(Resources.ExcelParserIcoNeu), 
    TargetPageType = typeof(ListDetailsViewModel) 
},

二、HamburgerMenuImageItem的路径解析错误处理

出现路径无法解析的问题,通常是图片文件的生成属性配置错误或pack URI写法问题,按以下步骤排查:

  1. 检查图片文件的生成属性

    • 在Visual Studio中选中excelparsericoneu.jpg文件
    • 在属性窗口中,将生成操作设置为Resource,复制到输出目录设置为不复制
  2. 修正pack URI写法
    如果你的图片在当前程序集的Images文件夹下,可直接使用相对URI,或明确指定程序集名称(若路径仍报错):

    // 写法1:相对URI(推荐)
    static string ExcelJpg = "/Images/excelparsericoneu.jpg";
    // 写法2:完整pack URI(替换为你的项目程序集名称)
    static string ExcelJpg = "pack://application:,,,/YourAssemblyName;component/Images/excelparsericoneu.jpg";
    
  3. 初始化BitmapImage时指定UriKind
    创建BitmapImage时明确指定Uri类型,避免解析歧义:

    new HamburgerMenuImageItem()
    { 
        Label = Resources.ShellExcelParserPage, 
        Thumbnail = new BitmapImage(new Uri(ExcelJpg, UriKind.RelativeOrAbsolute)), 
        TargetPageType = typeof(ExcelParserViewModel) 
    }
    

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:55:09