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

时间:2017-11-17 12:16:30

标签: xaml xamarin xamarin.forms staticresource

我有这样的资源。

<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'}" />

1 个答案:

答案 0 :(得分:1)

如果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'}" />