我认为我的代码是自我解释的:
<Label Style="{DynamicResource labelStyle}"
HorizontalTextAlignment="End" Text="{Binding message}">
<OnPlatform x:TypeArguments="Color">
<OnPlatform.iOS>
{DynamicResource rightBubbleFontColor}
</OnPlatform.iOS>
<OnPlatform.Android>
{DynamicResource rightBubbleFontColor}
</OnPlatform.Android>
<OnPlatform.Android>
{StaticResource rightBubbleFontColor}
</OnPlatform.Android>
</OnPlatform>
</Label>
我试图动态地将颜色绑定到标签上。根据当前平台,它必须是另一种类型的资源(DynamicResource或StaticResource)。
我在尝试构建解决方案时遇到此异常:
System.ArgumentException: An item with the same key has already been added.
我现在有了这段代码:
<Label Style="{DynamicResource labelStyle}"
HorizontalTextAlignment="End" Text="{Binding message}">
<Label.TextColor>
<OnPlatform
x:Key="RightBubbleFontColor"
x:TypeArguments="Color"
iOS="{DynamicResource rightBubbleFontColor}"
Android="{DynamicResource rightBubbleFontColor}"
WinPhone="{StaticResource rightBubbleFontColor}">
</OnPlatform>
</Label.TextColor>
</Label>
我收到以下错误消息:
Object reference not set to an instance of an object.
当我将绑定替换为颜色时,它会起作用。
工作示例:
<Label Style="{DynamicResource labelStyle}"
HorizontalTextAlignment="End" Text="{Binding message}">
<Label.TextColor>
<OnPlatform
x:Key="RightBubbleFontColor"
x:TypeArguments="Color"
iOS="Red"
Android="Green"
WinPhone="Blue">
</OnPlatform>
</Label.TextColor>
</Label>
所以我想我试图绑定这个问题的方式一定是个问题。
提出一个新问题来更好地描述问题:https://stackoverflow.com/questions/39852888/xamarin-forms-use-dynamicresource-or-staticresource-depending-on-os
答案 0 :(得分:2)
您有两个<OnPlatform.Android>
元素。我假设最后一个是<OnPlatform.WinPhone>
。
<强> EDITED 强>
现在您已经修复了这个问题,也许可以尝试一下它实际工作吗?
<OnPlatform
x:Key="BubbleTextColor"
x:TypedArguments="Color"
iOS="{DynamicResource rightBubbleFontColor}"
Android="{DynamicResource rightBubbleFontColor}"
WinPhone="{StaticResource rightBubbleFontColor}" />
然后在必要时绑定它。
不确定它是否与您现有的有所不同,但我想这值得一试。