我有这样的资源。
<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'}" />
答案 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'}" />