2015-05-24 39 views
-1

我正在Windows 7上構建WPF 4.5上WPF MenuItem的動態列表。 構建它們並讓它們顯示標題正常工作。 但我不能讓他們加載圖標。我在這個主題上發現了一些帖子,但他們都沒有解決這個問題。 MenuItem Icon綁定的屬性在我最近的嘗試中定義如下。但我已經試過相對URI,路徑的所有組合等BitmapImage不從WPF中的資源加載4.5

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文件在圖像文件夾中,並具有「資源'構建行動。

+0

我應該補充說明Images文件夾中的bold.png文件有一個'Resource'構建動作,因此包含在內。 –

+0

爲什麼這種複雜的方式來創建一個pack URI? 'new Uri(「pack:// application:,,,/Images/bold.png」)''? – Clemens

+0

嗯,我曾嘗試過,但我的圖標沒有顯示...我再次嘗試,它仍然沒有顯示。調試時,我在Source的元數據屬性上看到以下內容:元數據\t'(i.Source).Metadata'拋出了System.Windows.Media.ImageMetadata {System.NotSupportedException}類型的異常'System.NotSupportedException'。 –

回答

-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瞭解更多信息。

+0

絕對URI和本地程序集不起作用,即圖像不顯示。相對Uri拋出異常... –

+0

如果Uri有效(在調用src.EndInit()時不會引發異常),那麼問題可能會在代碼流中稍後發生。我不知道你是如何構建你的視圖,但孤立地看,有一個方法返回一個新的Image而不是一個返回ImageSource的方法,稍後將其分配給一個現有的Image,這看起來有點不尋常。最終最終將圖像放置在可視化樹中的位置會影響它如何佈局並最終呈現圖像。有關如何使用圖像的更多信息可以幫助追蹤問題。 – Xavier

-1

確實!問題是,我綁定了MenuItem類型的Icon屬性,而不是綁定RibbonMenuItem的ImageSource!

感謝您指點我正確的方向。