我想要将几个图像嵌入到exe中。
当我将构建操作设置为嵌入式资源时 我在代码中查看了资源不可用的错误,并要求我将构建操作设置为资源
我尝试了几种不同的方法:
<ImageSource x:Key="Image_Background">YearBook;component/Resources/Images/darkaurora.png</ImageSource>
<ImageSource x:Key="Image_Background">Images/darkaurora.png</ImageSource>
<ImageSource x:Key="Image_Background">pack://application:,,,/Resources/Images/darkaurora.png</ImageSource>
此代码位于资源文件中。 但没有一个工作,他们都抛出这个错误:
Cannot convert the string 'pack://application:,,,/Resources/Images/darkaurora.png' into a 'System.Windows.Media.ImageSource' object. Cannot locate resource 'resources/images/darkaurora.png'. Error at object 'Image_Background' in markup file 'YearBook;component/Resources/ImageResources.xaml' Line 4 Position 6.
在代码的不同位置我得到:
the file 'YearBook;component/Resources/Images/shadowdrop.png' is not a part of the project or its 'Build Action' property is not set to 'Resource'
那么,我做错了什么?
答案 0 :(得分:22)
将 BuildAction 设置为资源时,它将作为程序集中的嵌入资源。
或者您可以将 BuildAction 设置为内容,然后将其捆绑到生成的.xap文件中。
您可以使用这些BuildActions中的任何一个。通过将 BuildAction 设置为内容,您可以访问Image,如:
"/Resources/Images/darkaurora.png"
(必须以斜线开头)。当您使用 BuildAction资源时,您可以访问图像"/YearBook;component/Resources/Images/darkaurora.png"
(程序集名称;组件/相对路径)。希望这会有所帮助。
答案 1 :(得分:3)
将构建操作设置为“资源”,而不是“嵌入资源”
答案 2 :(得分:0)
ImageSource无法实例化。
public abstract class ImageSource : Animatable,
IFormattable
那里有一点abstract
,这会让你的日子变得疲惫不堪。您的xaml实际上是在尝试实例化ImageSource的一个实例,然后将元素(在本例中为您的Uri)中的值分配给标有ContentPropertyAttribute(??)的属性,使用可以定位的转换器将字符串转换为一个对象(再次,??)。
我想你想要BitmapSource。
<BitmapImage
x:Key="Image_Background"
UriSource="/Images/darkaurora.png" />
答案 3 :(得分:0)
对于使用xamarin表单并碰到这个问题的用户,可以通过创建一个自定义的xaml标记扩展名来完成此操作,
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/images?tabs=windows
“嵌入式图像”->“使用XAML”部分中
自定义扩展的引用
[ContentProperty (nameof(Source))]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue (IServiceProvider serviceProvider)
{
if (Source == null)
{
return null;
}
// Do your translation lookup here, using whatever method you require
var imageSource = ImageSource.FromResource(Source, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
return imageSource;
}
}
使用方法的引用
<?xml version="1.0" encoding="UTF-8" ?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:WorkingWithImages;assembly=WorkingWithImages"
x:Class="WorkingWithImages.EmbeddedImagesXaml">
<StackLayout VerticalOptions="Center" HorizontalOptions="Center">
<!-- use a custom Markup Extension -->
<Image Source="{local:ImageResource WorkingWithImages.beach.jpg}" />
</StackLayout>
</ContentPage>