Xamarin ImageResource扩展不起作用
本文关键字:不起作用 扩展 ImageResource Xamarin | 更新日期: 2023-09-27 18:02:47
我正在尝试使用Xamarin行为和转换器验证用户输入表单。试图将布尔转换为对象,以显示正确和错误的图像使用ImageResource
扩展,但图像没有出现。
<converter:BooleanToObjectConverter x:Key="boolToStyleImage"
x:TypeArguments="Style">
<converter:BooleanToObjectConverter.FalseObject>
<Style TargetType="Image">
<Setter Property="HeightRequest" Value="20" />
<Setter Property="Source" Value="{extension:ImageResource Uno.Images.error.png}" />
</Style>
</converter:BooleanToObjectConverter.FalseObject>
<converter:BooleanToObjectConverter.TrueObject>
<Style TargetType="Image">
<Setter Property="HeightRequest" Value="20" />
<Setter Property="Source" Value="{extension:ImageResource Uno.Images.success.png}" />
</Style>
</converter:BooleanToObjectConverter.TrueObject>
</converter:BooleanToObjectConverter>
和我的布尔对象转换代码:
public class BooleanToObjectConverter<T> : IValueConverter
{
public T FalseObject { set; get; }
public T TrueObject { set; get; }
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
return (bool)value ? this.TrueObject : this.FalseObject;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return ((T)value).Equals(this.TrueObject);
}
}
和我的图像资源扩展类:
[ContentProperty("Source")]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Source == null)
return null;
var imageSource = ImageSource.FromResource(Source);
return imageSource;
}
}
有谁能帮我解决这个问题吗?
看看Charles Petzolds的书:https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/
第874页的触发器和行为章节应该会给你指明正确的方向。
你的ImageResourceExtension和BoolToObject转换器是正确的。
确保你要使用的图片有一个嵌入资源
在模型制作
public class NodeItem
{
public string ImagePath { get; set; }
public string Name { get; set; }
public double Price { get; set; }
public ImageSource MyImageSource
{
get
{ //here you decide what resource to use
return ImageSource.FromResource(ImagePath);
}
}
}
在ViewModel RoladyItems.Add(new NodeItem() { ImagePath = "Project.Images.Rolady._MG_8150_521x347.png", Name = "Rolada 1", Price = 9.99 });