【问题标题】:'Provide value on 'System.Windows.Baml2006.TypeConverterMarkupExtension' threw an exception.''在 'System.Windows.Baml2006.TypeConverterMarkupExtension' 上提供值引发了异常。'
【发布时间】:2012-10-01 17:56:47
【问题描述】:

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

有人有建议吗?

【问题讨论】:

  • 尽量注释掉尽可能多的代码,但仍然抛出异常。我们的想法是找到引发此异常所必需的单一事物。

标签: c# wpf xaml


【解决方案1】:

解决方案很奇怪,但我已经想通了。

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

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

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

希望这对某人有所帮助。

【讨论】:

  • 也得到了这个,很奇怪。我可以添加带有图标的图像,但是如果我将图像源设置为带有样式触发器的图标,我会遇到这个问题...
  • 这很奇怪。我更改了项目名称和程序集名称。然后我得到了 IndexConverter 类在我的命名空间中不存在的消息(XAML 中的错误) - 但一切都很好。然后我找到了那个帖子。它有帮助。问题出在另一个文件中的程序图标(没有提示我错误)...谢谢!祝你有美好的一天:D
  • 谢谢尼克,为我工作。我的图标在路径中硬编码了程序集名称,我将其更改为相对于应用程序,它解决了问题。
  • 我拼错了 Resources: Icon="./Resourses/cmd_IDI_APPICON.ico"。那很痛!似乎都是关于图标的。
  • 不要添加 try..catch,要查看内部异常,您可以转到 Debug>Windows>Locals
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      改进 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"。最后错误消失了。

      仅供参考 VS2012.3 Win8.1Preview

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 我将我的设置为内容而不是资源
          • 这可能也可以,只要图像及其位置正确输出到 Debug 和/或 Release 文件夹就可以了
          • 对我来说,我必须同时设置 Copy = AlwaysBuild Action = Content 才能让它工作。 :/ (将 PNG 文件设置为矩形内的ImageBrush)谢谢大家。
          • 确实,复制 = 总是成功,构建操作已经在内容上。
          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

              <Button Command="MyCommand" />
              

              而不是

              <Button Command="{Binding MyCommand}" />
              

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

                  在我的情况下,文件存在于磁盘上,但未在项目中引用。我将它们添加到项目中,但尽管重新加载解决方案并重新启动 Visual Studio,但错误仍然存​​在。

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

                  【讨论】:

                    【解决方案12】:

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

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

                    它应该可以解决问题。

                    【讨论】:

                      【解决方案13】:

                      尝试将图像文件的Build ActionProperty 设置为Resource

                      【讨论】:

                        【解决方案14】:

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

                        【讨论】:

                          【解决方案15】:

                          只需转到项目>[您的项目名称]设置并将您的 .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">
                          

                          【讨论】:

                            【解决方案16】:

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

                            【讨论】:

                              【解决方案17】:

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

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

                              现在使用 结束

                              【讨论】:

                              • 这个解决方案对我有用。显然我没有包含图像。
                              【解决方案18】:

                              在我的情况下,我遇到了这个错误

                              <Border Background="eeeeee">
                              

                              而不是

                              <Border Background="#eeeeee">
                              

                              (注意错误#

                              【讨论】:

                                【解决方案19】:

                                这是由xaml中的非标准标签选项导致的 初始化组件(); 功能在 - 尝试模式 - 像这样

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

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

                                【讨论】:

                                  【解决方案20】:

                                  我在我的 XAML 中某处发现了“UpdateSourceTrigger=Pr”。

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

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

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

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

                                  我在 Win 10 Pro,VS2017 上工作

                                  【讨论】:

                                    【解决方案21】:

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

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

                                    我删除了多余的斜线,错误消失了。

                                    【讨论】:

                                      【解决方案22】:

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

                                      【讨论】:

                                        【解决方案23】:

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

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

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

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

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

                                          • 示例:“/Resources/logo.png”如果您有项目级别的文件夹
                                            • 注意前缀/
                                        • xaml 文件中的颜色代码缺少主题标签前缀 "#000FE0"

                                        【讨论】:

                                        • +1 - 我遇到了这个问题,因为我的图标文件没有被标记为“资源”——这是一个容易犯的错误,但错误消息不是很清楚。刚才说了cannot locate resource 'icon.ico'。希望这对其他人有帮助。
                                        【解决方案24】:

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

                                        <Window
                                        .....
                                             Height="450" Width="400" 
                                             Icon="../Resources/SettingsCopy.png" >
                                        

                                        【讨论】:

                                        • 我相信我遇到了类似的问题,因为重新启动我的计算机为我解决了这个问题,无需任何更改:)
                                        猜你喜欢
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2010-12-29
                                        • 2016-05-24
                                        • 2012-04-17
                                        • 2011-04-23
                                        • 2019-01-26
                                        相关资源
                                        最近更新 更多