在运行时为 xaml .Net 2.0 多平台移动开发分配图像资源
Assigning image resource during runtime for xaml .Net 2.0 multi platform mobile development
目标:
我想用这样的图像显示一个 ImageButton:
当前的解决方案有效,但我只能选择将单个图像硬编码到 xaml。
为此我已经准备了很多东西:
现状
我添加了图像并将其设置为“构建操作:嵌入式资源”
我已经按照网上的建议添加了 ImageResourceExtension 以便在 xaml:
中使用
using System;
using System.Reflection;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Bitconomy.resources
{
[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;
}
}
}
- 我在 xaml 中添加了对 ImageResourceExtension/resources 的引用:
xmlns:resources="clr-namespace:Bitconomy.resources"
- 我已将图像资源添加到 ImageButton:
<ImageButton x:Name="MiningButton" Grid.Row="0" Source="{resources:ImageResource Bitconomy.resources.images.mines.stone_mine.jpg}" ></ImageButton>
结果是顶部“目标”部分下显示的结果。目前还好。
问题
我想在旅途中设置地雷。我准备了一个“mining_view.xaml”。在“mining_view.xaml.cs”中,我添加了配置地雷的代码,例如。用于石头、铁或任何东西。我想为每个地雷设置不同的图像。
我过去在堆栈溢出时遇到过类似的问题,但它是针对桌面使用的。毕竟移动开发有多么不同,我感到很震惊。相似但不相同。
如果你能帮我弄清楚如何在代码中设置图像源以便它在 android 和 ios 中工作,我将非常高兴。
public void ConfigureMine(string ItemType)
{
this.MiningButton.Source = new ImageSource.FromResource("resources:ImageResource Bitconomy.resources.images.mines.stone_mine.jpg");
// or sth like that?
this.MiningButton.Source = resources.ImageResourceExtension.ProvideValue(SomeProvider?)
}
- 在 xaml 中创建图像。将 x:Name 属性 分配给 select 来自代码的图像:
<Image x:Name="Mine_Image" Grid.Column="0" Grid.Row="0" Aspect="AspectFill"></Image>
- 您将需要资源扩展:
using System;
using System.Reflection;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Bitconomy.resources
{
[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;
}
public ImageSource GetImageSource(string resourcepath)
{
return ImageSource.FromResource(resourcepath, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
}
}
}
添加资源图片
将图像设置为构建操作“嵌入式资源”
在form.xaml.cs内更改图片(根据需要调整资源路径):
this.Mine_Image.Source = Resources.GetImageSource("Bitconomy.resources.images.resources.Stone_mine.jpg");
目标:
我想用这样的图像显示一个 ImageButton:
当前的解决方案有效,但我只能选择将单个图像硬编码到 xaml。
为此我已经准备了很多东西:
现状
我添加了图像并将其设置为“构建操作:嵌入式资源”
我已经按照网上的建议添加了 ImageResourceExtension 以便在 xaml:
中使用
using System;
using System.Reflection;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Bitconomy.resources
{
[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;
}
}
}
- 我在 xaml 中添加了对 ImageResourceExtension/resources 的引用:
xmlns:resources="clr-namespace:Bitconomy.resources"
- 我已将图像资源添加到 ImageButton:
<ImageButton x:Name="MiningButton" Grid.Row="0" Source="{resources:ImageResource Bitconomy.resources.images.mines.stone_mine.jpg}" ></ImageButton>
结果是顶部“目标”部分下显示的结果。目前还好。
问题
我想在旅途中设置地雷。我准备了一个“mining_view.xaml”。在“mining_view.xaml.cs”中,我添加了配置地雷的代码,例如。用于石头、铁或任何东西。我想为每个地雷设置不同的图像。
我过去在堆栈溢出时遇到过类似的问题,但它是针对桌面使用的。毕竟移动开发有多么不同,我感到很震惊。相似但不相同。
如果你能帮我弄清楚如何在代码中设置图像源以便它在 android 和 ios 中工作,我将非常高兴。
public void ConfigureMine(string ItemType)
{
this.MiningButton.Source = new ImageSource.FromResource("resources:ImageResource Bitconomy.resources.images.mines.stone_mine.jpg");
// or sth like that?
this.MiningButton.Source = resources.ImageResourceExtension.ProvideValue(SomeProvider?)
}
- 在 xaml 中创建图像。将 x:Name 属性 分配给 select 来自代码的图像:
<Image x:Name="Mine_Image" Grid.Column="0" Grid.Row="0" Aspect="AspectFill"></Image>
- 您将需要资源扩展:
using System;
using System.Reflection;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Bitconomy.resources
{
[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;
}
public ImageSource GetImageSource(string resourcepath)
{
return ImageSource.FromResource(resourcepath, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
}
}
}
添加资源图片
将图像设置为构建操作“嵌入式资源”
在form.xaml.cs内更改图片(根据需要调整资源路径):
this.Mine_Image.Source = Resources.GetImageSource("Bitconomy.resources.images.resources.Stone_mine.jpg");