Xamarin.Forms - 禁用SwitchCell OnPlatform引发iOS

时间:2016-12-29 17:02:19

标签: c# xamarin xamarin.ios xamarin.forms

我想以这种方式禁用iOS中的Xamarin.Forms中的SwitchCell

<SwitchCell x:Name="mySC" Text="Foo" OnChanged="myFnc"/>
<SwitchCell.IsEnabled>
    <OnPlatform x:TypeArguments="x:Boolean">
            <OnPlatform.iOS>
                 false
             </OnPlatform.iOS>
            <OnPlatform.Android>
                 true
            </OnPlatform.Android>
        </OnPlatform>
</SwitchCell.IsEnabled>

当我在iOS模拟器上运行此代码时,会抛出异常:

  

System.Reflection.TargetInvocationException:抛出了异常   通过调用的目标。 ---&GT; System.NullReferenceException:   你调用的对象是空的   在Xamarin.Forms.Cell.OnIsEnabledPropertyChanged(Xamarin.Forms.BindableObject可绑定,System.Object旧值,   System.Object newvalue)[0x00000] in   C:\ BuildAgent \工作\ aad494dc9bc9783 \ Xamarin.Forms.Core \细胞\ Cell.cs:197

如果我将true的值设置为OnPlatform.iOS则可行。如果我没有使用OnPlatform标记并为所有平台设置IsEnabled="false",那么它运行良好 - 该假设是关于iOS模拟器中的错误。

1 个答案:

答案 0 :(得分:1)

我认为问题是SwitchCell.IsEnabled属性必须在SwitchCell元素内。您正在使用表单:

<SwitchCell x:Name="mySC" Text="Foo" OnChanged="myFnc"/>

在设置IsEnabled属性之前关闭切换单元格定义。相反,试试这个:

<SwitchCell Text="{Binding .}" >
      <SwitchCell.IsEnabled>
           <OnPlatform x:TypeArguments="x:Boolean">
                <OnPlatform.iOS>
                     false
                </OnPlatform.iOS>
                <OnPlatform.Android>
                     true
                </OnPlatform.Android>
           </OnPlatform>
      </SwitchCell.IsEnabled>
 </SwitchCell>

以便在SwitchCell的定义内设置属性,而不是在date之外。我刚刚测试过,这适用于iOS和Android,但是使用你的代码在iOS上失败了。