当我在WPF中打开一个窗口时会抛出标题中的异常,奇怪的是,这在我的Windows 7开发机器上不会发生,也不会在Windows 7上部署时发生。
我只在Windows XP上出现此错误,而且只是第二次打开窗口。
以下是打开窗口的代码:
ReportParametersWindow win = null;
bool canOverWrite = _shownReports.Contains(rpt.FriendlyName);
if (!(canOverWrite))
win = new ReportParametersWindow(rpt.FriendlyName, rpt.ReportParameters, canOverWrite);
else
win = new ReportParametersWindow(rpt.FriendlyName, (container.ParametersWindow as ReportParametersWindow).Controls, canOverWrite);
win.ShowDialog();
窗口的XAML:
<Window xmlns:my="clr-namespace:MHA.Modules.Core.Controls;assembly=MHA.Modules.Core"
x:Class="MHA.Modules.Reports.Views.ReportParametersWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Parameters" Height="500" Width="600" MinWidth="500" MaxHeight="500"
Icon="/MHA.Modules.Reports;component/Images/Parameters.ico" SizeToContent="WidthAndHeight"
WindowStartupLocation="CenterScreen"
xmlns:odc="clr-namespace:Odyssey.Controls;assembly=Odyssey" Closed="Window_Closed">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" Name="ScrollViewer1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" CanContentScroll="True">
<StackPanel Name="ParameterStack">
<my:LocationCtl Text="Parameters for report - " Name="loc"/>
</StackPanel>
</ScrollViewer>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<CheckBox ToolTip="This will replace the first report of the same type that was shown." Name="chkOverwrite" Content="Overwrite old" VerticalAlignment="Center" Margin="5,0"></CheckBox>
<Button Grid.Column="2" HorizontalAlignment="Right" Margin="5,0" Height="30" Style="{StaticResource DionysusButton}" Width="100" IsDefault="True" Click="Button_Click">
<StackPanel Orientation="Horizontal">
<Image Source="/MHA.Modules.Reports;component/Images/Success.png"></Image>
<TextBlock Margin="5,0" Text="Accept" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Button>
</Grid>
</Grid>
有人有建议吗?
答案 0 :(得分:43)
解决方案非常奇怪,但我已经弄清楚了。
我意识到错误发生在窗口的InitializeComponent()上,然后我向构造函数添加了一个try catch并显示了Exception的InnerException。
我收到的错误是“无法识别图像格式”。
我不知道为什么这只会在XP上发生,第二次显示窗口但是用.png替换我的.ico时,问题就解决了。
希望这有助于某人。
答案 1 :(得分:23)
我刚刚遇到了这个问题......我知道这已经过时了,但我最终要做的就是将图像设置为Resource,并将Copy Always设置为仅通过浏览我的/ bin / Debug文件夹我是否意识到图像不在有效的路径位置
答案 2 :(得分:11)
如果所需图像在指定位置不可用,也会出现此问题。因此,检查内部异常并添加可能已丢失或拼写错误的任何图像。
答案 3 :(得分:8)
我收到此错误,因为我的Button的命令绑定错误:
<Button Command="MyCommand" />
而不是
<Button Command="{Binding MyCommand}" />
答案 4 :(得分:4)
在我的情况下,根本原因是所有图像上的BuildAction属性都是错误的。我通过将BuildAction从Content更改为Resource来修复它。
答案 5 :(得分:2)
您应首先将图像导入项目 解决方案资源管理器 - 全部显示
然后右键单击图像并选择包含
现在使用 端
答案 6 :(得分:2)
将资源字典从我的应用程序的根目录移动到子目录后,我遇到了这个异常。在我的情况下,问题是我在字典里面的样式设置器中的图像路径。在我之前使用正斜杠'/'后,应用程序再次开始工作。如果您遇到类似问题,请打开资源字典,错误将以蓝色“波浪线”突出显示。
答案 7 :(得分:2)
在我的情况下,我已经为我的模块添加了'Wpf Toolkit'参考,并且没有必要。 删除此引用后,一切正常。奇怪!
答案 8 :(得分:1)
在我的情况下,我发现新添加的图标(图像)文件未添加到我的项目中。将这些新图像文件添加到项目中后,它就解决了,而不仅仅是文件复制。
答案 9 :(得分:1)
复制并粘贴文件名已更改。这就是我收到此错误的原因。
答案 10 :(得分:1)
只需转到项目&gt; [您的项目名称]设置并将.ico文件设置为图标,现在清单文件中提到.ico文件,您只需使用
Icon =“[图标文件名] .ico”
<Window x:Class="[Your project's name].MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="" Height="500" Width="720"
Icon="[your icon's name].ico">
答案 11 :(得分:1)
删除&#34; WPFToolkit&#34;来自cs.proj文件的引用。
<Reference Include="WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
应该这样做。
答案 12 :(得分:1)
在我的情况下,文件存在于磁盘上但未在项目中引用。我将它们添加到项目中但是尽管重新加载解决方案并重新启动Visual Studio,但错误仍然存在。
我将对已存在于项目中的现有文件的引用更改为运行正常(尽管图形错误)。然后我将其更改回原始参考,它再次运行正常,但使用正确的图像。据推测,错误是以某种方式缓存,直到它被冲出系统......
答案 13 :(得分:1)
有很多方法可以导致此问题。由于该异常不是特定的。这是尝试使用此线程的解决方案的列表。
首先,您可以try/catch
进行InitializeComponent()
调用,该调用引发异常以获取有关所发生事件的更多详细信息。
.ico
文件有问题-我使用的是.NETCore 确保图像文件的构建动作为Resource
或Embedded Resource
本节中描述的资源文件与 XAML资源中描述的资源文件,与嵌入式文件不同 或“管理应用程序资源(.NET)”中描述的链接资源。 -MSDN
确保对文件的引用正确地拼写和路径
/
。 "#000FE0"
答案 14 :(得分:0)
好吧,就我而言,我是在不久前将图像文件夹添加到项目中的同时,将新照片添加到FileExplore中的图像文件夹中。并且项目中的图像路径没有任何问题。但是当我构建项目时,我遇到了同样的错误。 然后我通过在图像文件夹上单击 将这些新照片添加到项目中,然后 添加现有项目 并选择新照片。然后我 清洗溶液 并 再次构建它 。
答案 15 :(得分:0)
我遇到此错误,发现图像源路径格式有误。正斜杠/
添加如下:
Source="/TestProject;component/Images//hat_and_book.png
我删除了多余的斜杠,错误消失了。
答案 16 :(得分:0)
就我而言,另一个程序正在使用该图像,并且以某种方式阻止了访问。 我疯了副本,这行得通。
<Window
.....
Height="450" Width="400"
Icon="../Resources/SettingsCopy.png" >
答案 17 :(得分:0)
我在XAML中的某个地方找到了“ UpdateSourceTrigger = Pr”。
必须在编辑过程中发生。
编译正常,一切正常。
在app.xaml.cs的Application_DispatcherUnhandledException中设置断点会显示该错误。
更正为“ UpdateSourceTrigger = PropertyChanged”,世界本来应该如此。
我致力于Win 10 Pro,VS2017
答案 18 :(得分:0)
在我的情况下,我有
时出现此错误<Border Background="eeeeee">
而不是
<Border Background="#eeeeee">
(注意missign #
)
答案 19 :(得分:0)
以前在构造函数中发生异常。 Button的命令绑定不正确。
例如:<Button Command="MyCommand" />
- &gt;错误
<Button Command="{Binding MyCommand}" />
- &GT;右
答案 20 :(得分:0)
尝试将Build Action
图片文件的Property
设为Resource
。
答案 21 :(得分:0)
我遇到了同样的问题,并且要为您添加图像解决方案,您必须通过wizzard来完成。在解决方案资源管理器中 - &gt;右键单击相应的文件夹 - &gt;添加现有项目 - &gt;然后浏览到您的图像。这对我有用。希望这可以帮助。 谢谢你的回答。
答案 22 :(得分:0)
改进user2125523:
如果您已将图像添加到项目中并进行检查并仔细检查文件拼写是否正确,请尝试重命名图像以镜像不同的现有图像。构建/运行,然后返回您的图像文件名,然后重新构建/运行。
例如:
我的原始代码一直在LargeImage="/img/32/delete.order.png"
上抛出OP错误,即使该文件存在。
<telerik:RadRibbonButton Text="Object Properties" Size="Large"
Name="PropertiesButton" IsTabStop="True"
telerik:ScreenTip.Description="Get object properties"
Click="PropertiesButton_Click"
LargeImage="/img/32/properties.png"
SmallImage="/img/16/properties.png" />
<telerik:RadRibbonButton Text="Reset Tab Order" Size="Large"
Name="ClearTabOrderButton" IsTabStop="True"
telerik:ScreenTip.Description="Reset tab order of all fields"
Click="ClearTabOrder_Click"
LargeImage="/img/32/delete.order.png"
SmallImage="/img/16/delete.order.png" />
因此,我将LargeImage="/img/32/delete.order.png"
更改为LargeImage="/img/32/properties.png"
,运行该程序,并将其更改回"/img/32/delete.order.png"
。最后错误消失了。
FYI VS2012.3 Win8.1Preview
答案 23 :(得分:-2)
它是由xaml中的非标准标记选项引起的 的InitializeComponent(); 功能 - 尝试模式 - 像这样
try {
InitializeComponent();
}
catch (Exception ex) {
MessageBox.Show(ex.Message.ToString());
}
现在MessageBox((在控件.axml文件中显示错误设置的行号。(在更正后再显示错误的行标记错误,然后再次运行应用程序并查看下一行)