我在WPF XAML中发现了一个错误,当为XAML窗口指定图标时,尝试运行程序会生成一条错误消息,内容如下:
System.Windows.Application.LoadComponent(Me, resourceLocater)
发生XamlParseException
在“System.Windows.Baml2006.TypeConverterMarkupExtension”上提供值时引发了异常。行号为“5”,行位置为“100”。
我已经在Copy To Output Directory
上将图标设置为Always Create
,但没有成功。
我把图标从Resource
改成了EmbeddedResource
-也没有运气。
我把它添加到项目的Resources
中-仍然没有运气。
我已经100%确认了文件和位置。
窗口的XAML正确,名称正确,路径正确。
Icon="Resources/VisualizerIcon.ico"
网上论坛说Copy to output Directory是解决方案,但是,在构建解决方案之后,只复制了文件夹(即使我明确设置了要复制的ICO文件)。
有没有人?
5条答案
按热度按时间c3frrgcw1#
您只需要将实际图像/图标的构建操作设置为Resource,如属性窗口中所示。
我知道这是一个老职位,只是想分享一个虚拟错误。
s3fp2yjn2#
您可以使用项目设置对其进行设置(右键单击项目,然后选择"属性")
如以下屏幕截图所示:
我发现它更简单,不需要代码,而且它很好用...
j2cgzkjk3#
请尝试检查内部异常。如果调用位置类似于:
在系统. Windows.媒体.图像.位图源.关键副本像素(系统. Windows. Int32矩形,IntPtr,Int32,Int32)位于系统. Windows.媒体.图像处理.位图源.关键副本像素(系统. Windows. Int32矩形,系统.数组,Int32,Int32)位于系统. Windows.媒体.图像.位图源.复制像素(系统. Windows. Int32矩形,系统.数组,Int32,Int32)位于系统. Windows.媒体.图像.位图源.复制像素(系统.数组,Int32,Int32)在MS.内部.应用程序模型. IconHelper.从位图帧创建IconHandleFromBitmapFrame(系统. Windows.媒体.图像.位图帧)在MS.内部.应用程序模型.图标助手.从图像源创建图标句柄(系统.窗口.媒体.图像源,系统.窗口.大小)位于MS.内部.应用程序模型.图标助手.从图像源获取图标句柄(系统.窗口.媒体.图像源,按引用的图标句柄,按引用的图标句柄)在系统.窗口.窗口.更新图标()位于系统.窗口.窗口.设置初始状态(双、双、双、在系统.窗口.窗口.创建源窗口中双击(布尔值)在系统.窗口.窗口.显示助手(系统.对象)在系统.窗口.线程.异常 Package .内部RealCall(系统.委托,系统.对象,Int32)在系统.窗口.线程.异常 Package . TryCatchWhen(系统.对象,系统.委托,系统.对象,Int32,在系统.窗口.线程.调度程序操作.调用实现中()位于系统.线程.执行上下文.运行内部(系统.执行绪.执行内容,系统.执行绪.内容回呼,系统.对象,布林值)于系统.执行绪.执行(系统.执行绪.执行内容,系统.执行绪.内容回呼,系统.对象,布林值)于系统.执行绪.执行(系统.线程.执行上下文,系统.线程.上下文回调,系统.对象)位于MS.内部.区域性保留执行上下文.运行(MS.内部.文化保留执行上下文,系统.线程.上下文回调,系统.对象)在系统.窗口.线程.调度程序操作.调用()位于系统. Windows.线程.调度程序.进程队列()位于系统. Windows.线程.调度程序. WndProcHook在MS.Win32.HwndWrapper.WndProc中的(内部指针、内部32、内部指针、内部指针、布尔型ByRef)(内部指针,内部32,内部指针,内部指针,在MS.Win32.HwndSubclass.DispatcherCallbackOperation中的布尔型ByRef)(系统.对象)在系统.窗口.线程.异常 Package .内部RealCall(系统.委托,系统.对象,Int32)在系统.窗口.线程.异常 Package . TryCatchWhen(系统.对象,系统.委托,系统.对象,Int32,系统.委托)(系统. Windows.线程.调度程序优先级,系统.时间跨度,系统.委托,系统.对象,Int32)at MS.Win32.HwndSubclass.SubclassWndProc(内部指针、内部32、内部指针、在MS.Win32上的IntPtr)。不安全的本机方法。调度消息(系统.窗口.互操作.消息ByRef)位于系统.窗口.线程.调度程序. PushFrameImpl(系统. windows .执行绪.分派器框架)位于系统. windows .应用程序.执行分派器(系统.对象)在系统.窗口.应用程序.运行内部(系统.窗口.窗口)在客户端启动器.应用程序.主()
那么你可能会遇到像this这样的错误,除了它可能发生在更新的操作系统上,比如Windows 10。我们的一些客户端在Windows 10机器上有这种崩溃。
解决方案是简化图标文件,不要让它包含大于64 * 64的框架,或者简单地使用PNG作为窗口图标。尽管如此,高分辨率图标仍然可以用作应用图标。
nnt7mjpx4#
只需将Resources compile属性设置为Resources。
或窗口图标
krugob8w5#
下面是我在窗口的loaded事件中想到的内容(不优雅,但很有效):
和helper函数:
删除对象代码: