Xamarin ImageResource扩展不起作用

本文关键字:不起作用 扩展 ImageResource Xamarin | 更新日期: 2023-09-27 18:02:47

我正在尝试使用Xamarin行为和转换器验证用户输入表单。试图将布尔转换为对象,以显示正确和错误的图像使用ImageResource扩展,但图像没有出现。

下面是我的XAML标记:
<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;
        }
}
有谁能帮我解决这个问题吗?

Xamarin ImageResource扩展不起作用

看看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 });