Xamarin Forms中ViewBox的替代方案

时间:2017-08-11 08:33:07

标签: xamarin xamarin.ios xamarin.forms

Xamarin 中的 ViewBox还有其他选择,我可以保持图像的宽高比吗?

我正在将我的Windows Phone应用程序转换为Xamarin Forms。我的大多数屏幕都有可点击的图像,我可以捕捉图像部分的X Y坐标。我将所有图像都放在 ViewBox 中以保持其宽高比,这样我就可以得到与图像相同的x y位置,而与屏幕尺寸/分辨率无关。

我愿意使用 Xamarin.IOS 中的任何本机控件执行此操作。

1 个答案:

答案 0 :(得分:0)

不幸的是,Xamain.forms中的BoxView与WP中的名称不同。

你需要的是RelativeLayout这有点复杂但灵活。当应用程序在不同大小的屏幕上运行时,控件将根据您的约束适应它们。

例如:

<RelativeLayout>
    <Image BackgroundColor="Red" Source="Icon-76.png" Aspect="Fill" x:Name="redBox"
        RelativeLayout.XConstraint="{ConstraintExpression 
            Type=RelativeToParent,
            Property=Width,
            Factor=0.05,
            Constant=0}"
        RelativeLayout.YConstraint="{ConstraintExpression 
            Type=RelativeToParent,
            Property=Y,
            Factor=1,
            Constant=20}"
        RelativeLayout.WidthConstraint="{ConstraintExpression
            Type=RelativeToParent,
            Property=Width,
            Factor=.6,
            Constant=0}"
        RelativeLayout.HeightConstraint="{ConstraintExpression
            Type=RelativeToParent,
            Property=Height,
            Factor=.6,
            Constant=0}" />
</RelativeLayout>

enter image description here

RelativeLayout.XConstraint RelativeLayout.YConstraint 找到控件的X,Y坐标。

RelativeLayout.WidthConstraint RelativeLayout.HeightConstraint 用于向控件添加宽度/高度约束。

该图像中的(x,y)是((父宽度的5%),20),它相对于父母。它的宽度或高度是父母的60%。当然,您可以通过类型 ElementName 将其设置为相对于其他视图,如下所示:

RelativeLayout.XConstraint="{ConstraintExpression 
            Type=RelativeToView,
            ElementName=redBox,
            Property=Width,
            Factor=1,
            Constant=0}"

<强> ConstraintExpression:

  

类型 - 约束是相对于父项还是相对于另一个视图。

     

属性 - 使用哪个属性作为约束的基础。

     

因素 - 要应用于属性值的因素。

     

常量 - 用作值的偏移量的值。

     

ElementName - 约束相对于的视图的名称。

您可以设置 Aspect 以查找适合您图片的显示。

<Image Source="Icon-76.png" Aspect="Fill"/>
  

AspectFill 缩放图像以填充视图。某些部分可能会被剪裁以填充视图。

     

AspectFit 缩放图片以适合视图。有些部分可能留空(字母装箱)。

     

填充缩放图像,使其完全填满视图。 X和Y中的缩放可能不一致。