2015-09-03 69 views
0

我正在開發一個在主窗口和任務欄上具有相同圖標的應用程序。路由到WPF圖像資源

所以,我添加的圖標資源列表,並鏈接到主窗口:

<Window x:Class="MGWUpdater.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:xxxxxx" 
    mc:Ignorable="d" 
    Title="xxxxxx" Height="283.333" Width="260" 
    ResizeMode="CanMinimize" Icon="Resources/icon.ico"> 

然後,我通過這種方式創建一個NotifyIcon

public NotifyIcon ni = new NotifyIcon(); 

但我不知道如何將我的圖標分配給我剛剛創建的NotifyIcon。我想這一點,但它不工作:

ni.Icon = new Icon("Resources/icon.ico"); 
+1

是否有任何錯誤消息? –

+1

https://msdn.microsoft.com/en-us/library/bb514687(v=vs.90).aspx –

+0

是的,我發佈的代碼拋出下一個錯誤信息:'異常'System.Windows.Markup.XamlParseException '在PresentationFramework.dll中' –

回答

0

研究了一段時間後,我找到解決辦法。要引用任何資源上的Resources庫,你只需要使用下面的代碼: Properties.Resources.your_resource

舉個例子,在我的代碼,我只是使用的下一行代碼:

ni.Icon = Properties.Resources.icon; 

感謝你的答案!

0

你可以試試這個

using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(
     "<project namespace>.<folder path>" + "filename.ico")) 
    { 
     notifyIcon.Icon = new Icon(stream); 
    } 

或可替代

public NotifyIcon ni = new NotifyIcon(); 
ni.Icon = (Icon)this.FindResource("icon.ico"); 
+0

當我使用'ni.Icon =(圖標)this.FindResource(「favicon.ico」);'一行代碼VS拋出我的下一個錯誤: 'Resource'icon.ico'沒有找到' 順便說一句,如果我使用下一行代碼:'ni.Icon =(Icon)this.Resources [「icon.ico」];'它啓動應用程序,但不顯示任務欄上的圖標。 –

1

您必須將圖標添加到資源list.Then必須使用你的屬性項目,你的XAML文件中加入:

xmlns:res="clr-namespace:nameProject.Properties"> 

當然,如果該圖標被保存在一個資源文件,你必須轉換圖標。你只需要在XAML代碼添加Convert類:

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources/Styles.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
     <conv:ImageConverter x:Key="ImageConverter" /> 
    </ResourceDictionary> 
</UserControl.Resources> 

可以綁定資源元素,圖片,無論:

<Image HorizontalAlignment="Center" 
     VerticalAlignment="Top" 
     Source="{Binding Source={x:Static res:Resources.close}, 
     Converter={StaticResource ImageConverter}}"/> 

這是ImageConverter轉換類(必須添加它爲綁定):

public class ImageConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     MemoryStream ms = new MemoryStream(); 
     ((System.Drawing.Bitmap)value).Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     ms.Seek(0, SeekOrigin.Begin); 
     image.StreamSource = ms; 
     image.EndInit(); 

     return image; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

爲您的信息:x:StaticConverter

我對此有所幫助!