41

当我在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>

有人有建议吗?

4

24 回答 24

52

解决方案很奇怪,但我已经弄清楚了。

我意识到错误发生在窗口的 InitializeComponent() 上,然后我在构造函数中添加了一个 try catch 并显示了异常的 InnerException。

我收到的错误是“无法识别图像格式”。

我不知道为什么这只发生在 XP 和第二次显示窗口时,但是通过用 .png 替换我的 .ico 问题得到了解决。

希望这可以帮助某人。

于 2012-10-11T07:39:58.133 回答
27

我也遇到了这个问题......我知道这很旧,但我最终要做的是将图像设置为资源,并始终复制......只有浏览我的 /bin/Debug 文件夹我才意识到图像不在有效的路径位置

于 2013-08-22T13:18:53.387 回答
11

如果所需图像在指定位置不可用,也会出现此问题。所以检查内部异常并添加任何可能丢失或拼写错误的图像。

于 2013-03-01T23:59:25.693 回答
8

我收到此错误是因为我的按钮命令绑定错误:

<Button Command="MyCommand" />

代替

<Button Command="{Binding MyCommand}" />
于 2014-02-25T08:40:15.600 回答
6

您应该首先将图像导入您的项目解决方案资源管理器 - 显示全部

在此处输入图像描述

然后右键单击图像并选择包含

在此处输入图像描述

现在使用结束

于 2016-08-27T21:58:47.450 回答
5

在我的情况下,根本原因是所有图像上的 BuildAction 属性错误。我通过将 BuildAction 从 Content 更改为 Resource 来修复它。

于 2013-06-17T18:21:09.940 回答
2

就我而言,我已将“WpfToolkit”引用添加到我的模块中,并且没有必要。删除此引用后,一切正常。奇怪的!

于 2014-01-17T09:35:15.830 回答
2

将我的资源字典从我的应用程序的根目录移动到子目录后,我得到了这个异常。就我而言,问题是字典中我的样式设置器中的图像路径。在我在它们前面加上正斜杠“/”之后,应用程序又开始工作了。如果您遇到类似的问题,请打开资源字典,错误将用蓝色的“波浪”线突出显示。

于 2013-09-23T14:31:09.403 回答
2

只需转到项目> [您的项目名称]设置并将您的 .ico 文件设置为图标现在您的 .ico 文件在您的清单文件中被提及,您可以使用简单地将您的 .ico 文件包含在您的 XAML 文件中

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">
于 2015-11-20T19:55:08.320 回答
1

就我而言,我发现新添加的图标(图像)文件没有添加到我的项目中。在我将这些新图像文件添加到我的项目中后,它得到了解决,而不仅仅是文件副本。

于 2014-07-06T07:47:34.610 回答
1

在我的例子中,这些文件存在于磁盘上,但在项目中没有被引用。我将它们添加到项目中,但尽管重新加载解决方案并重新启动 Visual Studio,但错误仍然存​​在。

我更改了对项目中已经存在的现有文件的引用,它运行良好(尽管图形错误)。然后我将它改回原来的参考,它再次运行良好,但图像正确。据推测,错误以某种方式被缓存,直到它被从系统中清除......

于 2014-12-12T16:20:16.757 回答
1

从您的 cs.proj 文件中删除“WPFToolkit”引用。

<Reference Include="WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

它应该可以解决问题。

于 2015-03-30T07:42:31.777 回答
1

就我而言,另一个程序正在使用该图像,并且以某种方式阻止了访问。我发了一个副本,这很有效。

<Window
.....
     Height="450" Width="400" 
     Icon="../Resources/SettingsCopy.png" >
于 2020-07-20T18:37:27.943 回答
1

好吧,在我的情况下,我将新照片添加到 FileExplore 中的图像文件夹中,而图像文件夹已添加到项目中。并且项目中的图像路径没有任何问题。但是当我构建项目时,我面临同样的错误。然后我通过右键单击图像文件夹将这些新照片添加到项目并添加现有项目并选择新照片。然后我清理了解决方案再次构建它

于 2019-07-22T12:37:53.860 回答
1

有很多方法可以导致这个问题。由于异常不是特定的。以下是可以从此线程尝试的解决方案列表。

首先,您可以通过引发异常try/catchInitializeComponent()调用来获取有关所发生情况的更多详细信息。

  • 如果图像是图标 (.ico) 文件,请改用图像 (.png) 或等效文件
    • 在某些情况下.ico文件有问题 - 我使用的是 .NETCore
  • 确保您的图像文件具有构建操作ResourceEmbedded Resource

    本节中描述的资源文件不同于 XAML 资源中描述的资源文件,也不同于管理应用程序资源 (.NET) 中描述的嵌入或链接资源。- MSDN

  • 确保您对文件的引用拼写路径正确

    • 示例:“/Resources/logo.png”如果您有项目级别的文件夹
      • 注意前缀/
  • xaml 文件中的颜色代码缺少主题标签前缀"#000FE0"
于 2020-04-08T01:51:02.663 回答
1

复制并粘贴文件名已更改。这就是我收到此错误的原因。

于 2016-06-06T07:14:35.093 回答
0

我遇到了同样的问题,要向您的解决方案添加图像,您必须通过向导来完成。在解决方案资源管理器中 -> 右键单击​​相应的文件夹 -> 添加现有项目 -> 然后浏览到您的图像。这对我有用。希望这可以帮助。谢谢你的回答。

于 2013-07-25T15:53:36.870 回答
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.1预览

于 2013-07-11T16:53:48.020 回答
0

尝试将一组图像文件设置Build Action为.PropertyResource

于 2015-04-27T22:17:56.550 回答
0

异常曾经在构造函数中发生。Button 的命令绑定不正确。例如:<Button Command="MyCommand" />--> 错误 <Button Command="{Binding MyCommand}" />--> 正确

于 2015-06-08T11:29:32.447 回答
0

我在 XAML 的某处找到了“UpdateSourceTrigger=Pr”。

一定是在编辑过程中发生的。

编译顺利,没有任何错误。

在 app.xaml.cs 中的 Application_DispatcherUnhandledException 中设置断点揭示了错误。

更正为“UpdateSourceTrigger=PropertyChanged”,世界本应如此。

我在 Win 10 Pro,VS2017 上工作

于 2019-01-23T15:15:30.187 回答
0

遇到这个错误,发现是Image Source路径格式有误。添加了一个正斜杠/,如下所示:

Source="/TestProject;component/Images//hat_and_book.png

我删除了那个额外的斜线,错误就消失了。

于 2019-07-22T07:42:33.103 回答
0

就我而言,当我遇到此错误时

<Border Background="eeeeee">

代替

<Border Background="#eeeeee">

(注意错误#

于 2017-09-20T15:06:29.570 回答
-2

它是由 xaml 中的非标准标记选项导致找到它 set InitializeComponent(); 功能 - 尝试模式 - 像这样

 try { 
InitializeComponent(); 
} 
catch (Exception ex) { 
MessageBox.Show(ex.Message.ToString()); 
}

现在MessageBox((显示控制.axml文件中设置不正确的行号。(它只是在更正后显示第一个不正确的行标记错误,然后再次运行应用程序并查看下一个)

于 2017-10-21T16:41:11.767 回答