Xamarin 表单:找不到自定义扩展

Xamarin Form: Custom Extension not found

我在 Common Assembly 名称下创建了一个 ImageResourceExtension class。我在 属性 window 设置中检查了 Reference 下的名称。此扩展的命名空间是 Extension.Common。

使用此 Common Assembly 的工作项目的 xaml 声明为:

xmlns:common="clr-namespace:Extension.Common;assembly:Common"

元素写成:

<common:BooleanToObjectConverter x:Key="boolToStyleImage"
                                              x:TypeArguments="Style">
        <common:BooleanToObjectConverter.FalseObject>
          <Style TargetType="Image">
            <Setter Property="HeightRequest" Value="20" />
            <Setter Property="Source" Value="{common:ImageResource Common.Images.error.png}" />
          </Style>
        </common:BooleanToObjectConverter.FalseObject>

图像存储在 Images 目录中的 Common 项目文件夹中

我将 ImageResource 文件命名为 ImageResourceExtension.cs 并尝试了 ImageResource.cs 但 none 有效。它只是给我一个例外说:

MarkupExtension not found for common:ImageResource

我不知道出了什么问题。已完成博客的所有步骤。

我放置那些 xaml 东西的项目在一个共享项目中。不知道会不会有什么不同

希望我理解你的问题!

看这段代码:

[ContentProperty("Source")]
public class ImageSourceExtension : 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("Project.Images." + Source);

        return imageSource;
    }
}

现在,如果您想像在 xaml 中那样使用图像,类似的东西应该可以工作:

<Image Source="{extension:ImageSource LogoProject.png}"/>

注意1:我只放了图片的名字,因为在扩展中,路径是自动放的;)

注意 2: 你必须像我下面那样输入 assembly/namespace:

xmlns:extension="clr-namespace:Project.Sources.Extensions;assembly=Project"

此外,您的图像必须是 EmbeddedResource,不要忘记这一点。对于路径,它是 Project.Path.Image.png 而不是汇编 ;)

我希望我理解你的问题,我可以帮助你:)