2017-08-11 90 views
1

在Xamarin中有沒有其他替代方案ViewBox,我可以保持我的圖像的縱橫比?Xamarin形式的ViewBox替代方案

我將我的Windows Phone應用程序轉換爲Xamarin Forms。我的大部分屏幕都有可點擊的圖像,用於捕獲圖像部分的X Y座標。我的所有圖像都在ViewBox中以保持其縱橫比,這樣我就可以獲得與圖像大小/分辨率無關的相同xy位置的圖像。

我打開可以用Xamarin.IOS也可以。

+0

據我所知,沒有一個現有的控件模仿iOS或Android中的viewbox行爲。 iOS使用通用約束系統來組織父容器內的控件。對於android也有類似的原理。 – Digitalsa1nt

+0

嘗試網格。它保持比例。有一個捕獲。它沒有適當地調整分配的高度。看到我的答案,我已經解決了另一個答案 –

+0

嗨尤里,我可以知道你的另一個答案是什麼嗎?我在這裏找不到任何東西。 – Praddy

回答

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.XConstraintRelativeLayout.YConstraint找到X,Y您的控件的座標。

RelativeLayout.WidthConstraintRelativeLayout.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中可能不一致。

+0

嗨凱文,謝謝你的回覆。但使用RelativeLayout和AspectFit,圖像大小將始終保持不變,但不會縮放到屏幕大小。此外,XY座標因不同的屏幕尺寸而異。有沒有辦法控制它?我希望XY座標與屏幕中圖像的大小無關。任何建議,歡迎。 – Praddy

+0

@Praddy,我已經更新了我的答案。使用'Aspect =「填充」'縮放到屏幕大小。還可以將x,y座標設置爲父級或其他視圖的寬度/高度的某個百分比,請參閱我的XConstraint更新。 –