2016-12-30 93 views
6

這裏是xaml(stacklayout中的圖像)。一切都是合乎邏輯的:我將Aspect設置爲AspectFit和Horizo​​ntalOptions爲FillAndExpand。圖像寬度必須填滿堆疊佈局的寬度。必須計算高度才能成像。Xamarin表格圖像填充寬度與適當的方面

<Image BackgroundColor="Fuchsia" 
     Aspect="AspectFit" 
     Source="{Binding GroupLogo}" 
     HorizontalOptions="FillAndExpand" 
     VerticalOptions="FillAndExpand"/> 

它填充的寬度,但它不想繪製圖像的全寬。爲什麼?

enter image description here

+0

使用AspectFill代替AspectFit –

+1

@JayPatel這將剪切圖像 –

回答

7

AspectFit做什麼它在錫說,將整個圖像融入景觀,這可能會使視圖空的部分。直接從Xamarin的文檔:

縮放圖像以適應視圖。有些部分可能會留空(信箱)。

你在找什麼是AspectFill,這會縮小圖片以適應:

縮放圖像來填充視圖。爲了填充視圖,可能會剪切某些部分。

如果您試圖讓圖像視圖成爲圖像的高度,我建議在圖像的高度添加HeightRequest。根據我的經驗,圖像控件似乎不會自動在Xamarin中縮放,因爲本機控件默認也不支持。

Reference

+0

你是什麼尋找是AspectFill(c)不,我不想削減圖像。我希望它能夠填充寬度並具有所需的高度以保存圖像的方面。我怎樣才能做到這一點?身高請求不是一個選項。我不知道我會收到什麼圖片 –

+0

正如我所說的,原生控件不能在XF XAML中進行縮放,因爲沒有自定義渲染實現(這可能會使用iOS/Android上的一些核心更改)將不會容易完成。我建議無論你從哪裏獲得圖像,都可以提供另一個可獲取圖像高度的可綁定屬性。在某些時候,您可以訪問圖像並獲取其屬性。 –

0

heightrequest stacklayout的必須是StartAndExpand或FillAndExpand或EndAndExpand以自動調整高度

+0

仍然相同的結果 <圖像源= 「{結合GroupLogo}」 VerticalOptions = 「StartAndExpand」 Horizo​​ntalOptions = 「FillAndExpand」 縱橫= 「AspectFit」/> –

+0

使heightsrequest堆佈局StartAndExpand或FillAndExpand的或EndAndExpand不圖片的高度要求 –

1

試着像一個網格內帶有電荷圖像:

<grid> 
    <image></image> 
</grid> 

有時,當我有沒有正確調整大小的圖像,將其插入網格內可以解決問題。

+0

它也沒有幫助 –

+0

這對我有用,請注意Scale的具體值:' ' – PaulD

2

因爲我沒有找到工作的例子。這對我完美的作品:

<Grid VerticalOptions="FillAndExpand"> 
     <ImageSource="{Binding ImageSrc}" Aspect = "AspectFill"/> 
</Grid> 
2

我有一個類似的問題。我想在可能的情況下填充StackLayout的寬度和高度,但不裁剪實際圖像。這裏的答案幫助我找到了正確的方法。這是什麼對我有效:

  <Grid 
       HorizontalOptions="FillAndExpand" 
       VerticalOptions="FillAndExpand" 
       > 
       <Image 
        x:Name="photo"       
        Aspect="AspectFit"      
       /> 
      </Grid> 

也許這將是有用的人。

澄清:

Horizo​​ntalOptionsVerticalOptions是與值FillAndExpand,所以高度和網格的寬度被調整以填充母體,在這種情況下也就是Stacklayout。該圖像是網格的一個子元素,因此它會根據父元素進行變換(我們沒有給出圖像的其他選項)。

圖像的方面設置爲AspectFit,以便圖像適合視圖(在此情況下爲網格)並保持其比率。

這樣,如果圖像處於肖像模式,但太窄,它將填充網格(StackLayout)的高度,但不會填充寬度以保持其比率並且不會從上方或下方裁剪。

如果圖像處於橫向模式,它將填充網格(StackLayout's)的寬度,但不會填充高度以保持其比率並且不會從左側或右側裁剪。

+0

This Works!但爲什麼? – brundaged

+0

嗨@brundaged,對於最近的答案抱歉。我已經爲代碼添加了一些說明。 – Sonia

0

嘗試使用CachedImageFFImageLoading NuGet包

MyPage.xaml

<StackLayout HorizontalOptions="FillAndExpand" 
      VerticalOptions="FillAndExpand" 
      Padding="0"> 
    <ff:CachedImage Source="{Binding GroupLogo}" 
        HorizontalOptions="Fill" 
        VerticalOptions="Fill" 
        Aspect="Fill" 
        DownsampleToViewSize="True"/> 
</StackLayout> 

這將導致圖像試圖水平填充容器和自動生成的寬度同時保持其方面。

這行代碼添加到MainActivity.xamlglobal::Xamarin.Forms.Forms.Init(this, bundle);

CachedImageRenderer.Init(true); 

例子可以發現here