路由到WPF图像资源

时间:2015-09-03 08:23:48

标签: c# wpf xaml

我正在主窗口和任务栏上开发一个带有相同图标的应用程序。

因此,我将图标添加到“资源”列表并链接到主窗口:

<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();

但我不知道如何将我的Icon分配给我刚创建的NotifyIcon。我试过这个,但它不起作用:

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

3 个答案:

答案 0 :(得分:1)

您必须将您的图标添加到资源列表中。然后您必须将属性项目的使用添加到XAML文件中:

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

当然,如果图标保存在资源文件中,则必须转换图标。您只需要在XAML代码中添加转换类:

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

您可以绑定资源元素,Image,等等:

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

这是ImageConverter转换类(必须将其添加到Binding中):

 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

我提供了这个帮助!

答案 1 :(得分: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"); 

答案 2 :(得分:0)

经过一段时间的研究,我找到了解决方案。要引用Resources库中的任何资源,只需使用下一个代码: Properties.Resources.your_resource

例如,在我的代码中,我只使用下一行代码:

ni.Icon = Properties.Resources.icon;

感谢您的回答!