XAML Xamarin OnPlatform绑定

时间:2016-09-30 11:58:23

标签: xaml exception xamarin binding arguments

我认为我的代码是自我解释的:

<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

1 个答案:

答案 0 :(得分:2)

您有两个<OnPlatform.Android>元素。我假设最后一个是<OnPlatform.WinPhone>

<强> EDITED

现在您已经修复了这个问题,也许可以尝试一下它实际工作吗?

<OnPlatform 
   x:Key="BubbleTextColor" 
   x:TypedArguments="Color"
   iOS="{DynamicResource rightBubbleFontColor}"
   Android="{DynamicResource rightBubbleFontColor}"
   WinPhone="{StaticResource rightBubbleFontColor}" />

然后在必要时绑定它。

不确定它是否与您现有的有所不同,但我想这值得一试。