Template Studio WPF中HamburgerMenuIconItem/ImageItem使用问题求助
一、HamburgerMenuIconItem无法渲染System.Drawing.Icon的处理
HamburgerMenuIconItem的Icon属性要求的是WPF的ImageSource类型,而非WinForms的System.Drawing.Icon,直接赋值会导致无法渲染,需要先将Icon转换为WPF可识别的BitmapSource:
- 添加转换方法:
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; } }
- 修改MenuItem的创建代码:
new HamburgerMenuIconItem() { Label = Resources.ShellListDetailsPage, Icon = ConvertIconToBitmapSource(Resources.ExcelParserIcoNeu), TargetPageType = typeof(ListDetailsViewModel) },
二、HamburgerMenuImageItem的路径解析错误处理
出现路径无法解析的问题,通常是图片文件的生成属性配置错误或pack URI写法问题,按以下步骤排查:
检查图片文件的生成属性
- 在Visual Studio中选中
excelparsericoneu.jpg文件 - 在属性窗口中,将生成操作设置为
Resource,复制到输出目录设置为不复制
- 在Visual Studio中选中
修正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";初始化BitmapImage时指定UriKind
创建BitmapImage时明确指定Uri类型,避免解析歧义:new HamburgerMenuImageItem() { Label = Resources.ShellExcelParserPage, Thumbnail = new BitmapImage(new Uri(ExcelJpg, UriKind.RelativeOrAbsolute)), TargetPageType = typeof(ExcelParserViewModel) }
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

