Xamarin在xaml中构建平台特定的图像源绑定

时间:2016-08-10 13:12:30

标签: binding xamarin.forms imagesource

我正在尝试以Xamal形式绑定xaml中的Image源,但是我收到以下错误。

  

无法分配属性“iOS”:类型不匹配   “Xamarin.Forms.Binding”和“Xamarin.Forms.ImageSource”

然而,我可以对图像源进行硬编码,但是我必须在很多地方进行硬编码,所以我更希望将它绑定到一个属性,如果更改可以在整个项目中反映出来。任何人都可以对我得到的错误有所了解吗?

我目前正在使用转换器类来检索源代码。下面是我当前生成错误的代码。此外,我不想转向基于代码的解决方案,而是希望看看是否可以在XAML中解决这个问题。

<Image 
    Aspect="AspectFill"
    Grid.Row="0"
    Grid.Column="3"
    Grid.RowSpan="2"
    VerticalOptions="Center"
    HorizontalOptions="End">

    <Image.Source>
        <OnPlatform x:TypeArguments="ImageSource"
            iOS="{Binding .,Converter={StaticResource getGestureIcon},ConverterParameter=Swipe}"
            Android="{Binding .,Converter={StaticResource getGestureIcon},ConverterParameter=LongPress}" />
    </Image.Source>
</Image>

谢谢

2 个答案:

答案 0 :(得分:1)

您过度复杂并且使用OnPlatform没有Binding支持。在您的转换器中检查您所在的平台。

答案 1 :(得分:0)

@Rui Marinho:我从没想过这样。那可能有用。但是,我以不同的方式实现它,即定义静态属性并直接引用它。使用了来自How to bind class properties in XAML of xamarin forms

的解决方案

以下是代码。

xmlns:Icon="clr-namespace:GetIcon"

 <Image 
  Aspect="AspectFill"
  Grid.Row="0"
  Grid.Column="2"
  Grid.RowSpan="2"
  VerticalOptions="Center"
  HorizontalOptions="End">
  <Image.Source>
  <OnPlatform 
    x:TypeArguments="ImageSource"
    iOS="{x:Static Icon:GetIcon.SwipeLeft}"
    Android="{x:Static Icon:GetIcon.LongTap}" />
  </Image.Source>
 </Image>