Xamarin.Forms:如何正确使用<onplatform>来选择在TableSection中使用哪个控件?

时间:2018-02-12 07:08:46

标签: xaml xamarin xamarin.forms

我有TableView几个部分。在我的TableSection中,我希望根据平台显示不同的控件。我想使用通常的TextCell for iOS和自定义ViewCell for Android。我尝试了以下代码:

<TableSection Title="Activity">
   <OnPlatform x:TypeArguments="View">
      <On Platform="iOS">
         <TextCell x:Name="btnCountIOS" Text="Count" Height="50" />
         <TextCell x:Name="cardHistory" Text="History" StyleId="disclosure" Tapped="openHistoryPage" Height="50"/>
      </On>
      <On Platform="Android">
         <local:MyViewCell NoTap="true" Height="50">
            <Grid VerticalOptions="CenterAndExpand" Padding="20, 0">
               <Label Style="{DynamicResource ListItemTextStyle}" HorizontalOptions="StartAndExpand" VerticalOptions="Center" Text="Today" />
               <Label Style="{DynamicResource ListItemTextStyle}" TextColor="Gray" HorizontalOptions="End" x:Name="btnCountDroid" />
            </Grid>
         </local:MyViewCell>
         <local:MyViewCell>
            <!-- more code here -->
         </local:MyViewCell>
      </On>
   </OnPlatform>
</TableSection>

上述代码不起作用。它给了我一个错误:Object reference not set to an instance of an object

我错过了什么吗?我应该使用其他x:TypeArguments吗?

修改

编辑纳入@Fahadsk答案,现在收到错误:System.ArrayTypeMismatchException: Attempted to access an element as a type incompatible with the array.任何人都知道我为什么会这样做?

1 个答案:

答案 0 :(得分:2)

  

自版本2.3.4起,OnPlatform已过时。

在代码中使用以下语法

<OnPlatform x:TypeArguments="Thickness">
     <On Platform="Android" Value="0, 0, 0, 0"/>
     <On Platform="iOS" Value="0, 20, 0, 0"/>
</OnPlatform>

有关pull request和此blog的详情,请查看此http://desktop.arcgis.com/en/arcmap/10.3/manage-data/geodatabases/automate-reconcile-post-after-sync.htm