如何将文本附加到 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'}" />
我有这样的资源。
<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'}" />