如何在XAML中创建特定于平台的RelativeLayout.XConstraint?

时间:2016-11-30 13:04:35

标签: xamarin xamarin.forms relativelayout

我希望RelativeLayout.XConstraint使用某些特定于平台的值。而且我想在xaml中使用OnPlatform关键字执行此操作。 我没有运气试过这个,

<RelativeLayout>
    <RelativeLayout.XConstraint>
         <OnPlatform x:TypeArguments="Constraint" Android="{ConstraintExpression Type=Constant,Constant=6" iOS="{ConstraintExpression Type=Constant,Constant=3}" />
     </RelativeLayout.XConstraint>
</RelativeLayout>

并尝试了这个https://forums.xamarin.com/discussion/57281/how-can-i-make-platform-specific-relativelayout-xconstraint-in-xaml,但它显示异常“指定的约束包含一个无法解决的循环”。

x:TypeArguments RelativeLayout.XConstraint或其他任何方法都是什么?期待有关此的任何提示/建议。

1 个答案:

答案 0 :(得分:3)

您正在将约束应用于RelativeLayout本身,但约束意在应用于布局的项目,如下所示。

<RelativeLayout>
  <Label Text="Foo">
    <RelativeLayout.XConstraint>
      <OnPlatform x:TypeArguments="Constraint" Android="{ConstraintExpression Type=Constant,Constant=6}" iOS="{ConstraintExpression Type=Constant,Constant=3}" />
    </RelativeLayout.XConstraint>
  </Label>
</RelativeLayout>

此外,您在第一个}标记上缺少结束大括号(ConstraintExpression)。

我对此进行了测试,它在XamlC关闭时工作得很好。  如果您运行的是XF 2.3.3,则可能会遇到https://bugzilla.xamarin.com/show_bug.cgi?id=48242,但存在修复程序(https://github.com/xamarin/Xamarin.Forms/pull/580),并将作为即将发布的服务版本的一部分发布。