在WPF中使用图像和图标

时间:2011-04-08 23:37:00

标签: c# .net wpf image icons

我正在尝试在我的WPF应用程序中使用Icon,并尝试使用其他一些图像,但我不断从Designer视图中收到错误,例如“path-x不是有效资源或无法找到”。 - 其中“path-x”是我尝试使用的任何图像的路径。

如果它在正确的地方寻找,我打赌它会找到它;)

然后,它决定不再给我那个错误了。所以,我继续点击Run(F5),在标题栏中看到我的新图标。只有面对这个野兽:

  

“System.Windows.Markup.XamlParseException   发生消息='提供价值   'System.Windows.Baml2006.TypeConverterMarkupExtension'   抛出一个例外。'行号'5'   和行位置'50'。
  来源= PresentationFramework
  LineNumber = 5 LinePosition = 50
  堆栈跟踪:          在System.Windows.Markup.XamlReader.RewrapException(Exception   e,IXamlLineInfo lineInfo,Uri   基本URI)          在System.Windows.Markup.WpfXamlLoader.Load(XamlReader)   xamlReader,IXamlObjectWriterFactory   writerFactory,布尔   skipJournaledProperties,Object   rootObject,XamlObjectWriterSettings   设置,Uri baseUri)          在System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader)   xamlReader,布尔值   skipJournaledProperties,Object   rootObject,XamlAccessLevel   accessLevel,Uri baseUri)          在System.Windows.Markup.XamlReader.LoadBaml(Stream   stream,ParserContext parserContext,   Object parent,Boolean closeStream)          在System.Windows.Application.LoadComponent(Object   组件,Uri resourceLocator)          at One_Stop_Management.MainWindow.InitializeComponent()   在c:\ Users \ Jason \ Documents \ Visual中   Studio 2010 \ Projects \ One Stop   管理\一站式   Management \ MainWindow.xaml:第1行          at One_Stop_Management.MainWindow..ctor()   在C:\ Users \ Jason \ Documents \ Visual中   Studio 2010 \ Projects \ One Stop   管理\一站式   Management \ MainWindow.xaml.cs:第25行   InnerException:System.IO.IOException          消息=找不到资源'images / favicon.ico'。          来源= PresentationFramework          堆栈跟踪:               在MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode   模式,FileAccess访问)               在System.IO.Packaging.PackagePart.GetStream(FileMode   模式,FileAccess访问)               在System.IO.Packaging.PackWebResponse.CachedResponse.GetResponseStream()               在System.IO.Packaging.PackWebResponse.GetResponseStream()               在System.IO.Packaging.PackWebResponse.get_ContentType()               在System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri)   uri,Stream stream,BitmapCacheOption   cacheOption,Guid& clsId,Boolean&   isOriginalWritable,Stream& uriStream,   UnmanagedMemoryStream&安培;   unmanagedMemoryStream,SafeFileHandle&   safeFilehandle)               在System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri)   baseUri,Uri uri,Stream stream,   BitmapCreateOptions createOptions,   BitmapCacheOption cacheOption,   RequestCachePolicy uriCachePolicy,   Boolean insertInDecoderCache)               在System.Windows.Media.Imaging.BitmapFrame.CreateFromUriOrStream(Uri)   baseUri,Uri uri,Stream stream,   BitmapCreateOptions createOptions,   BitmapCacheOption cacheOption,   RequestCachePolicy uriCachePolicy)               在System.Windows.Media.ImageSourceConverter.ConvertFrom(ITypeDescriptorContext)   上下文,CultureInfo文化,对象   值)               在System.Windows.Baml2006.TypeConverterMarkupExtension.ProvideValue(IServiceProvider)   服务提供者)               在MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension)   我,IServiceProvider serviceProvider)          InnerException:“

Exception at runtime while trying to use an icon for my titlebar!

为什么这件事给我的态度?我只是想插入一张图片......

更新

当我尝试使用属性窗格添加图标时,这是为图标生成的XAML:

<Fluent:RibbonWindow x:Class="One_Stop_Management.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Fluent="clr-namespace:Fluent;assembly=Fluent"
        Title="One Stop Management" Height="727" Width="1208" Icon="Resources\favicon.ico">

最新更新

enter image description here

我甚至无法使用属性窗格添加图标,下面是它给我的错误。

10 个答案:

答案 0 :(得分:5)

确保目标是资源。然后做这样的事情:

Icon="/MobilWPF;component/Resources/Images/MobileIcon.ico"

MobilWPF是您的命名空间,还是您的项目名称?我忘了我的项目名称,我的命名空间是一样的。

答案 1 :(得分:2)

我发现当你添加新资源然后重建项目时,VS2008有时会导致这样的问题。我发现如果你清理构建,然后从头开始重建,问题就会消失。对我来说看起来像VS2008的错误。

答案 2 :(得分:2)

我通过为图片设置这些属性来解决同样的问题:

Build Action = Content
Copy to Output Directory = Copy always

答案 3 :(得分:1)

对不起,我无法提供更多帮助。在开始阅读你的问题时,我认为它只是一种类型不匹配,就像你指定一个字符串时它意味着一个图像。这个问题似乎是一个有多种可能解决方案的问题。我只会将您链接到Microsoft Connect page that has them on it

,而不是列出所有内容

答案 4 :(得分:1)

例外情况,如果你仔细阅读,就说同样的事情:

  

InnerException:System.IO.IOException Message =找不到资源'images / favicon.ico'。

这可能是因为未正确设置Images/favicon.ico图标图像。确保它的Build Action设置为“Resource”,并且它位于“Images”文件夹下的项目中。

答案 5 :(得分:1)

答案似乎取决于您存储图标的位置/方式。我试图做类似于@iterationx's answer的事情,但它对我不起作用,这就是我最终完成的事情。我正在使用VS 2010。

我通过项目的属性页面,在“资源”,“添加资源”(下拉列表),“添加现有文件”下将图标添加为资源。然后我只使用Icon属性中的文件名:

Icon="my_icon.ico"

答案 6 :(得分:1)

我记得我的应用程序崩溃的类似情况,我最终将其跟踪为.ico错误。

如果您使用的是图标和Windows XP,则XP不支持256x256图标。您可能需要在编辑器中打开图标,例如IcoFx,并删除256x256图标。

答案 7 :(得分:1)

在资源BuildAction中将Resource设置为Properties解决了这个问题。

迎接

答案 8 :(得分:0)

我遇到了同样的问题,发现如果您的项目名称中有空格,则无法正确读取图像文件。希望有所帮助。

答案 9 :(得分:0)

使用Icon =“。\ Images \ test.ico”这让我工作