如何使用c#从WPF应用程序添加图像源?

时间:2017-06-06 06:40:31

标签: c# wpf

我是WPF应用程序的初学者。我检查了各种教程,但我找不到将图像添加到项目中的选项。我正在使用Visual Studio 2015.在我的.xaml页面中显示图像但是一旦我运行程序它就不显示图像。谁能帮帮我吗?

  

Source="/WpfApplication1;component/Images/Start.png"

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="438*"/>
            <ColumnDefinition Width="79*"/>
        </Grid.ColumnDefinitions>
        <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="266,114,0,0" VerticalAlignment="Top" Width="81" Height="20"/>
        <Image x:Name="image" HorizontalAlignment="Left" Height="96" Margin="52,71,0,0" VerticalAlignment="Top" Width="111" Source="/WpfApplication1;component/Images/Start.png"/>

    </Grid> </Window>

1 个答案:

答案 0 :(得分:2)

如果XAML Designer向您展示,那么很可能在构建/编译后,应用程序无法找到图像。这是一个非常常见的问题 - Designer和实际应用程序的资源查找有点不同。

右键单击项目,选择&#34;清理&#34;,稍等一下,然后再次右键单击并选择“构建”。完成后,检查输出bin \ debug或bin \ release目录,查看图像是否存在,位于.exe文件旁边。如果没有,则返回项目,右键单击项目中的图像,然后选择“属性”。然后选择BuildAction = CopyToOutput(即&#39;总是&#39; - 可能是图像和类似只读资源的最佳选择)。再次构建项目,现在它应该在.exe文件旁边可见,并且您的应用程序应该能够找到它(假设xaml中的路径到图像是正确的。)

如果您没有在项目中看到您的图片,那么您可能忘了添加它。右键单击该项目,选择添加现有的&#39;并添加图像,使其在项目中。否则,VisualStudio构建过程不知道图像(即使XAML看到它),也不会将其复制到输出目录。

我所描述的只是一种选择。还有更多可用的。例如,您可以将图像添加为&#34;嵌入式资源&#34;因此它内置于.exe中,不会坐在它旁边。但是,所有这些选项的细节都各不相同 - 具体而言,它们的不同之处在于:

  • 如何在项目中添加和配置图像选项
  • XAML中的Path-To-Image应该是什么样子

所以..它很容易搞砸。对于初学者,请关注一个选项(例如:Image-as-CopyToOutput或Image-as-EmbeddedResource)并且不要混淆它们。仔细阅读文章,因为通常没有明确说明他们选择的方式。

编辑:

我刚刚注意到你提供了代码。请参阅,XAML中的路径到图像现在是:

Source="/WpfApplication1;component/Images/Start.png"

表明这是一个嵌入式资源。您可以很容易地看到这是一条特殊的路径:(name-of-dll-or-exe) ; (component) / path-to-file。如果您使用这样的路径(它们被正式称为&#34; pack-uri&#34;),那么您应确保将图像添加到项目中,但它是设置image to&#34; buildaction = CopyToOutput&#34;就像我建议的那样,但对于&#34; BuildAction = EmbeddedResource&#34;。它也应该不是立即位于项目根目录中,而是位于&#34; images /&#34;子文件夹,以及该子文件夹应该在VS 的项目中可见。

如果您想尝试&#34; CopyToOutput&#34;方式,那么路径就是:

Source="Images/Start.png"

使用&#39; CopyToOutput&#39;模式,你实际上并不需要关心将图像添加到项目中 - 所有这些都需要它来确保有一个&#34;图像&#34;运行.exe之前的.exe文件旁边的文件夹。但是,您必须记住将图像保留在那里。如果您将文件夹和图像添加到项目中,并设置buildaction = content,那么VS将为您记住它,并将文件夹和图像放在.exe旁边作为构建的一部分。

所以..首先,确保将此图像和文件夹添加到项目中。然后决定要尝试哪种类型的BuildAction,设置它,在ImageSource中写入相关路径,然后..保持手指交叉。当你第一次这样做时可能很难,因为有很多方法可以做到这一点(不仅仅是我提到的那两个),VS / Xaml经常不报告任何错误..