图像显示在Visual Studio设计器中,但不会在运行时显示

时间:2011-12-13 00:46:27

标签: wpf visual-studio-2010 image xaml

我目前正在使用VS studio 2010,.NET 4.0。这是我的情景:

我目前有一个名为“Images”的类库项目,其中包含一个名为“Icons”的子文件夹。我的所有图标目前都存在于此项目中,并通过siteoforigin由多个项目访问。在设计师中,一切都很好,但在运行时,图像不会显示。

这是我的文件夹结构:

  • 根文件夹
    • 图片
      • 图标
    • 项目1
    • 项目2
    • 项目3

所有项目都引用Images类lib。 proj,“Images”项目中“icons”子文件夹内的所有图标都设置为:“Build Action = Resource”。

xaml看起来像这样(在设计时间内完全可见):

     <Button Name="Button1" Click="Button1_Click">
        <Button.Content>
            <Image Source="pack://siteoforigin:,,,/Data.Images;component/Icons/Button1.png" />
        </Button.Content>
    </Button>

24 个答案:

答案 0 :(得分:42)

这让我发疯了。我根据各种文章尝试了很多不同的东西,但没有任何效果。我的xaml窗口和图像位于与可执行程序集不同的DLL中。不确定这是否是我问题的一部分。

最后我取得了成功:

  1. 确保项目中的图像属性具有“Build Action”=“Resource”,而不是“Embedded Resource”
  2. 在xaml中,选择图像标记后,使用属性窗口选择Source下拉列表,因为现在图像显示在下拉列表中!这让visual studio为我格式化了字符串。
  3. 为我的图像格式化的字符串visual studio是:

    <Image Source="/Paperless.Common;component/Resources/Checkbook.png" />
    

    其中“Paperless.Common”是我的程序集的名称,“Checkbook.png”是我的图像,它位于“Resources”文件夹中。

答案 1 :(得分:38)

也许Image没有将Build Action设置为Resource。如果它是其他任何东西,包括嵌入式资源,那么它将无法在运行时正确显示。

答案 2 :(得分:14)

siteoforigin用于复制到可执行目录或子目录的文件,对于您应该使用application作为权限的资源,据我所知。

SiteOfOrigin:

  

路径:原始站点文件的名称,包括其相对于启动可执行程序集的位置的路径。

答案 3 :(得分:4)

好吧,我在这个问题上花了3个多小时的时间。 你的答案帮助我部分地解决了这个问题,而这正是促使我加入这个有用的讨论的原因。

我的问题解决了:

  1. 选择解决方案资源管理器资源中的所有图像。
  2. 右键单击并转到属性。
  3. 对“嵌入资源”构建操作
  4. 复制到输出“始终复制”
  5. 保存并构建解决方案。
  6. 添加图片并注意或ZIndex值。
  7. 完成所有这些后,当我多次使用图像或尝试更改为同一图像控件上的另一个图像时,我发现自己在XAML或图像控件属性中更改图像的路径是:

    source="pack:://siteoforigin:,,,/Resources/image.png"
    

答案 4 :(得分:3)

我来这里是为了让我的设计时图像数据显示出来(反问题)。

ImagePath="pack://application:,,,/MyApplicationName;component/Images/Icons/Button1.png"设置为Build ActionResource设置为Copy to Output Directory之外,

Copy if newer就是诀窍。

答案 5 :(得分:1)

您也可以简单地使用相对路径:

<Button Name="Button1" Click="Button1_Click">
    <Button.Content>
        <Image Source="Icons/Button1.png" />
    </Button.Content>
</Button>

答案 6 :(得分:1)

  

以下对我有用:

•构建操作=资源

•复制到输出目录=不复制

xaml:

<Image Source=“Rsources/myPic.png”/>

其中“ myPic.png”是“资源”文件夹中的图像

答案 7 :(得分:1)

请检查图像是否包含在解决方案中。如果未包含图像,则单击“从解决方案显示所有文件”,然后右键单击图像并选择“包含在项目中”选项。 之后,它也将与相对路径一起工作。

前:

&#34;源=&#34; /Images/Logo/close.png" &#34;

答案 8 :(得分:1)

最简单的方法是将图像添加到项目中。通过右键单击解决方案资源管理器->添加->文件夹(将其命名为资源)->右键单击新创建的资源文件夹->单击添加现有项->查找图像(选择所有文件),将资源文件夹添加到项目中/ p>

将图像项添加到所选的xaml表单中。在属性->通用->源下,您应该可以下拉并选择图片

Selecting from dropdown

答案 9 :(得分:1)

我有同样的问题。
现在它的工作......
试试这个:

<Button x:Name="b2" HorizontalAlignment="Left" VerticalAlignment="Top"
    Width="26" Height="29"> 
    <Button.Background> 
        <ImageBrush ImageSource=" a.png"/> 
    </Button.Background>
</Button>

答案 10 :(得分:1)

如果您使用DLL中的图像,请确保dll项目在Project的属性中设置了默认资源文件。并将其访问修饰符更改为public。 此外,将图像构建操作设置为“资源”

答案 11 :(得分:1)

它可能就像我今天早些时候做的一样简单。我将文件放在文件夹中,但没有在解决方案中引用它。它在设计中表现得很好。

答案 12 :(得分:0)

转到“解决方案资源管理器”->“找到图像”文件夹->右键单击图像,然后单击“转到属性”。将“构建操作无”更改为“资源... Image Property Change

答案 13 :(得分:0)

包括程序集名称作品    建立动作=>资源 复制到输出目录=>如果更新则复制

   System.Windows.Controls.Image mini = new System.Windows.Controls.Image();
                            mini.Source = new BitmapImage(new Uri(@"pack://application:,,,/Cloudnynpos;component/Imageresources/tbl2.png"));
                            btnnew.Content = mini;

答案 14 :(得分:0)

也许这可以帮助使用Visual Studio 2019的人。我错过了一个简单的/

步骤: 右键单击项目- 添加>现有项目- 选择要添加的图片- 单击Visual Studio中的图片- 去属性- 将“构建操作”更改为>资源

不,我们进入Xaml并添加您的资源

return this.http.get(`${this.ipUrl}/${endpoint}?${this.ipKey}`).pipe( map(({ country_code }: any) => country_code.toLowerCase()), map((code) => supportedCountries.includes(code) ? code : 'gb') );

图像名称前的/是必须的。如果没有/,它将显示为在xaml中工作,但是一旦启动该程序,它将不会显示。

<UserControl.Resources>
        <Image x:Key="ButtonImage" Source="/image.jpg"/>
 </UserControl.Resources>

如果您阅读此书,希望可以解决此问题

答案 15 :(得分:0)

这对我有用,但仅当我将第 3 步从“嵌入式资源”更改为“资源”时。我在这里复制并粘贴了@Mohamed Hussein 的答案,因为我仍然没有足够的声誉在他的帖子下发表评论。 >>>

好吧,我在这个问题上浪费了超过 3 个小时的时间。您的回答帮助我部分解决了问题,这也是促使我加入这个有用讨论的原因。

我的问题解决了:

1- 选择解决方案资源管理器中的所有图像。

2- 右键单击​​并转到属性。

3- 对“嵌入式资源”进行构建操作 >> 更改为“资源”

4- 复制到输出到“始终复制”

5- 保存并构建解决方案。

6- 添加图像并注意 ZIndex 值。

毕竟,当我多次使用图像或尝试更改为同一图像控件上的另一个图像以将 XAML 或图像控件属性中的图像路径更改为:< /p>

source="pack:://siteoforigin:,,,/Resources/image.png"

答案 16 :(得分:0)

我遇到了类似的问题。我最初是在类库项目中使用以下格式。

<Image Source="pack://siteoforigin:,,,/Images/Toolbars/Legend.png"/>

但是,当我清理/生成或重建解决方案或重新启动Visual Studio时,即使我在XAML设计器上看到按钮图像,该按钮图像也会消失。

我想出了一个奇怪的解决方案,但是它对我有用。 使用此解决方案,图像始终在运行时保持原样,并在设计时保持在XAML上, -解决方案重建后 -解决方案清洗并建立后 -在Visual Studio关闭并重新启动之后。

此解决方案需要在主应用程序和类库项目下都有两个具有相同图像名称的文件夹(我称为资源)。在项目下

<Image Source="pack://application:,,,/Resources/Legend.png"/> 

对于图像,设置BuildAction =资源并复制到OutputDirectory =不要在两个地方都复制。

如果我仅在主应用程序上使用资源文件夹,它仍然可以工作,但是这次XAML设计时解析器无法看到该图像。这就是为什么我在类库(XAML UserControl所在的位置)上复制了相同文件夹的原因。

这种复杂的原因可能是XAML分析器的内部工作原理。它的“设计时”部分始终位于UserControl所在项目下的文件夹位置,而其“运行时”部分则要求图像位于主应用程序中才能正常运行。

我并不是说这根本不是一个正确的解决方案,而是一个合理的解决方案,但是它对我而言有效。欢迎提出改进或更好的解决方案的评论。

更新:经过反复试验和一些其他线索(https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/aa970069(v=vs.100)),我想出了一个更简单的解决方案,并且对我来说有效

在资源处声明:

<BitmapImage x:Key="mLegend" UriSource="pack://siteoforigin:,,,/Images/Toolbars/Legend/Legend.png"/>

在Button下声明:

<Image Source="{StaticResource mLegend}"/>

set BuildAction =内容并复制到OutputDirectory =如果新则复制

最后一步,清理并构建解决方案。

答案 17 :(得分:0)

我的图片与我的窗口不在同一个项目中

我解决了问题,请转到“解决方案资源管理器”>“项目名称”>“资源”,然后选择图像并将“构建操作” 更改为“ 资源”。

答案 18 :(得分:0)

在UWP中,没有为“构建操作”选择“资源”,但是选择“内容”是可行的,其他* .png文件也是如此。由于某种原因,对我不起作用的一个名称为“ EmbeddedResource”。 感谢您的建议。

答案 19 :(得分:0)

就我而言,我只需要遵循两个步骤(属性Windows):
1)将Build Action(所有资源文件)更改为“Resource”;
2)在“源”字段中选择(再次)所需图像。

答案 20 :(得分:0)

对于可能不首先尝试此操作的任何人,如果您尝试了此处提到的某些修补程序,但没有任何工作正常,请尝试清理并重建您的解决方案。我只是忘了将图像添加到项目中(创建图像文件夹,右键单击文件夹 - &gt;添加现有 - &gt;单击图像)。

直到我完成清理和重建之后,它才解决。

答案 21 :(得分:0)

1-将文件图像属性更改为资源,{单击图像文件右侧 - >;选择属性 - &gt;切换构建对资源的操作。

2-使用此标签显示图像

 <Image Source="pack://application:,,,/[Put here the Main Namespace];component/[File path]"/>

例如

<Image Source="pack://application:,,,/My;component/Resources/switch-off.png"/>

答案 22 :(得分:0)

所有非常好的答案。我没有在上面看到这个,虽然它很简单明显,但肯定会引起原帖的症状。我们匆忙时很容易忘记。

确保将图像拖放到文件已“包含在项目中”的项目中。这可以从上下文菜单中快速获得。

答案 23 :(得分:0)

  1. Just Drag&amp;删除文件夹&#34;图标&#34;进入你的项目&#34;图像&#34;。
  2. 使用相对路径:Image Source =&#34; Icons / Button1.png&#34;。