如何将文本附加到 Xamarin.Forms 中的静态资源?

How to Append text to static resource in Xamarin.Forms?

我有这样的资源。

<ContentView.Resources>
    <ResourceDictionary>
        <x:String x:Key="LabelAutomationIdentifier">LBL_PD_L_PLV_LV_</x:String>
    </ResourceDictionary>
</ContentView.Resources>

我需要像这样在 Label 的 AutomationId 属性 中使用这个资源

<Label AutomationId="{StaticResource LabelAutomationIdentifier} + LabelName" />

但是,这是不正确的。我尝试了多种方法,但没有成功。

我试过了,

<Label AutomationId="{Binding Source={StaticResource LabelAutomationIdentifier}, StringFormat='{}{0}LabelName'}" />

还有

<Label AutomationId="{StaticResource LabelAutomationIdentifier, StringFormat='{0}LabelName'}" />

如果 AutomationId 是一个可绑定的 属性 - <Label AutomationId="{Binding Source={StaticResource LabelAutomationIdentifier}, StringFormat='{}{0}LabelName'}" /> 会工作得很好。

但事实并非如此,我相信这就是 Binding 在这种情况下不起作用的原因。此外,StaticResource 没有 StringFormat 属性 可以在这里使用,因此第二个选项失败。

但是,您可以扩展 StaticResource 扩展以创建自定义标记扩展以添加格式支持。

[ContentProperty("StaticResourceKey")]
public class FormatExtension : IMarkupExtension
{
    public string StringFormat { get; set; }
    public string StaticResourceKey { get; set; }

    public object ProvideValue(IServiceProvider serviceProvider)
    {
        string toReturn = null;
        if (serviceProvider == null)
            throw new ArgumentNullException(nameof(serviceProvider));

        if (StaticResourceKey != null)
        {
            var staticResourceExtension = new StaticResourceExtension { Key = StaticResourceKey };

            toReturn = (string)staticResourceExtension.ProvideValue(serviceProvider);
            if (!string.IsNullOrEmpty(StringFormat))
                toReturn = string.Format(StringFormat, toReturn);
        }

        return toReturn;
    }
}

示例用法

<Label AutomationId="{local:Format LabelAutomationIdentifier, StringFormat='{0}_LabelName'}" />