【问题标题】:Problem with access to image from resources / WPF从资源 / WPF 访问图像的问题
【发布时间】:2011-01-23 22:58:20
【问题描述】:

您好,我无法访问资源中的图像。首先,我将一张 png 图像(心脏名称)添加到资源中。

在 app.xaml 中,将 XAML 中的资源作为静态资源。

    <Application x:Class="Spirit.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                 xmlns:local="clr-namespace:Spirit.BootStraper"
                 xmlns:Converters="clr-namespace:Spirit.Converters" 
                 xmlns:Controls="clr-namespace:Spirit.Controls"
                 xmlns:props="clr-namespace:Spirit.Properties" >
        <Application.Resources>
            <ResourceDictionary>

                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary>
                        <local:MefBootStrapper x:Key="bootstrapper" />
                    </ResourceDictionary>
                </ResourceDictionary.MergedDictionaries>

                <props:Resources x:Key="Res"/>

            </ResourceDictionary>
        </Application.Resources>
    </Application>


And use on image from resources on image source.



       <Image Name="TroubleImage"
           Style="{StaticResource InfoIcon}"
           Source="{Binding Source={StaticResource Res}, 
           Path=heart, 
           Converter={StaticResource imageToGrayConverter}}">

If I run app I get this error:

在类型“Spirit.Properties.Resources”上找不到匹配的构造函数。您可以使用 Arguments 或 FactoryMethod 指令来构造此类型。

  at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at Spirit.Views.ChatView.InitializeComponent() in c:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger_Project\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\Views\ChatView.xaml:line 1
   at Spirit.Views.ChatView..ctor() in C:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger_Project\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\Views\ChatView.xaml.cs:line 23

什么不好?

已编辑:

ChatView.XAML

 <Window x:Class="Spirit.Views.ChatView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:Controls="clr-namespace:Spirit.Controls" 
        xmlns:Micro="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro" 
        Icon="/Spirit;component/Images/Logo/Icons/Ico/32.ico"
        Height="545" Width="763"
        Background="{StaticResource LightGrayBackground}">    
    <Grid   Margin="4,4,4,4">        
        <Grid Grid.Column="1" Margin="2,2,2,2">
            <Grid.RowDefinitions>
                <!--<RowDefinition Height="{Binding ElementName=InfoExpander, 
                    Path=IsExpanded, Converter={StaticResource expandedToGridLengthConverter}}" 
                               MaxHeight="220"/>-->
                <RowDefinition Height="*"></RowDefinition>
                <RowDefinition Height="25"></RowDefinition>
                <RowDefinition Height="80"></RowDefinition>
            </Grid.RowDefinitions>

            <Image Name="TroubleImage"
                                           Style="{StaticResource InfoIcon}"
                                           Source="{Binding Source={StaticResource Res}, 
                                                            Path=heart, 
                                                            Converter={StaticResource imageToGrayConverter}
                                                  }"/>

        </Grid>
    </Grid>
</Window>

chatview.xaml 中的第 23 行是 Path=heart 图像名称是 heart.png

这是我资源中的屏幕,我不知道我做错了什么?

http://i51.tinypic.com/14wrbs1.jpg

【问题讨论】:

    标签: wpf image resources static


    【解决方案1】:

    您在 App.xaml 中声明 &lt;props:Resources x:Key="Res"/&gt;,但 ChatView 中出现异常。请发布 ChatView.xaml 以解决您的问题。

    已编辑:

    好的。我试过了,我有点困惑。我多次遇到相同的异常,我可以确定您应该将&lt;props:Resources x:Key="Res"/&gt; 放在 ChatView.xaml 中。此外,我建议您将此声明放在&lt;Window.Resources&gt; 部分的末尾。

    已编辑 2

    哦,天哪,我绝对是愚蠢的。问题很明显!您根本不应该将资源作为静态资源! Properties.Resources 类的实例是自动创建的!此类公开静态属性。所以你必须通过 {x:Static } 绑定:

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" 
        xmlns:self="clr-namespace:WpfApplication1"
        xmlns:props="clr-namespace:WpfApplication1.Properties">
    <Window.Resources>
        <self:XmlConverter x:Key="Conv"/>
    </Window.Resources>
    <StackPanel>
        <Image Source="{Binding Source={x:Static props:Resources.dossier_ardoise_images}, Converter={StaticResource Conv}}"/>
    </StackPanel>
    

    【讨论】:

    • 嗨,我在 chatview 窗口资源中添加了 ,但我得到了和以前一样的错误:{.
    • 谢谢 :) 我刚开始学习 wpF 我也对这个问题感到困惑。你也终于解决了,感谢你花时间解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多