BitmapImage未从WPF 4.5中的资源加载

时间:2015-05-24 09:21:16

标签: wpf uri bitmapimage

我正在Windows 7上的WPF 4.5上构建WPF MenuItem的动态列表。 构建它们并让它们显示标题工作正常。 但我无法让他们加载图标。我找到了一些关于这个主题的帖子,但没有一个是解决问题的。 MenuItem Icon绑定的属性在我最近的尝试中按以下方式定义。但我已经尝试了相对URI,路径等的所有组合。

    public override Image MenuIcon
    {
        get
        {
            Image i = new Image();
            BitmapImage src = new BitmapImage();
            src.BeginInit();
            src.UriSource = new Uri(@"pack://application:,,,/" 
                    + Assembly.GetExecutingAssembly().GetName().Name 
                    + ";Images/bold.png", UriKind.Absolute); 
            src.CacheOption = BitmapCacheOption.OnLoad;
            src.EndInit();
            i.Source = src;
            return i;
        }
    }

我得到一个例外,说无法找到该文件... bold.png文件位于Images文件夹中,并具有“资源”构建操作。

2 个答案:

答案 0 :(得分:-1)

Indeed! The issue is, I was binding to the Icon property of a MenuItem type, instead of binding the ImageSource of a RibbonMenuItem!

Thanks for pointing me to the right direction.

答案 1 :(得分:-2)

我不确定您是否需要相对或绝对URI(不同的API更喜欢其中一个),但这两个都是:

// These two work regardless which loaded assembly the image is in, so long as you
// replace the assembly name with the name of the assembly containing the image.

// Absolute
new Uri("pack://application:,,,/" + Assembly.GetExecutingAssembly().GetName().Name + ";component/Images/bold.png", UriKind.Absolute);

// Relative
new Uri("/" + Assembly.GetExecutingAssembly().GetName().Name + ";component/Images/bold.png", UriKind.Relative);


// These two should also work if in local assembly (only works from within main
// executing assembly, not from within loaded DLLs).

// Absolute
new Uri("pack://application:,,,/Images/bold.png", UriKind.Absolute);

// Relative
new Uri("Images/bold.png", UriKind.Relative);

看起来你只是缺少路径的“组件”部分,使其与第一个示例匹配。

有关详细信息,请参阅Pack URIs in WPF