2016-11-22 42 views
0

我在Xamarin工作,我需要顯示一個stacklayout與其中的對象。到現在爲止還挺好。 Xamarin正確地將每個元素放在下一個元素的上面,用填充值分隔它們。如何讓Xamarin StackLayout正確地將高度分配給使用縮放的可視元素?

但是,使用其中某些元素的「縮放」屬性也很重要。我必須將這些元素.5或.3或其他浮點數作爲縮放值來縮小它們。

縮放工作正常。對象縮小,就像你期望的那樣。

問題的癥結在於,stackLayout並沒有縮小它分配的空間,以考慮元素被縮放。

如果我把3個boxviews放在一個stacklayout中,並使用Scaling屬性將第二個縮放到.5,那麼我想要的是一個正常大小的boxview,然後是一個更小的boxview,最後是另一個正常大小的boxview,下一個由stacklayout的填充。

然而,我得到的是一個正常大小的boxview,然後是一個小的boxviewe在一個正常大小的boxview接收的同一區域,然後是另一個正常大小的boxview。

在縮小的boxview周圍有很多空的空間,其中stacklayout爲其原始大小分配了足夠的空間。我不想那樣。我希望stacklayout爲對象提供它們縮放尺寸所需的空間,而不是它們的原始尺寸。

有沒有人知道我能做到這一點的方法?

感謝

回答

0

您是否嘗試過使用<Grid/><RowDefinitions Height="Auto"/>而不是使用StackLayout因爲我在某些情況下,發現更復雜的屏幕StackLayout並不總是大小/位置正確,我不得不更換它與網格。

此外,你可以嘗試在你的StackLayout上設置Spacing="0",因爲默認情況下,間距設置爲某個值,這可能是你爲什麼看到額外的空間。

0

不幸的是,縮放發生在元素已經被測量並且在佈局中分配空間之後。實現所需結果的真正方法是將WidthRequest和HeightRequest綁定到視圖模型中的屬性,並簡單地爲正常大小的框和一個半大小框定義兩組屬性。

<ContentPage x:Name="Root"> 
    <StackLayout Spacing="5" Orientation="Vertical"> 
     <BoxView HeightRequest="{Binding NormalSize}" WidthRequest="{Binding NormalSize}" /> 
     <BoxView HeightRequest="{Binding HalfSize}" WidthRequest="{Binding HalfSize}" /> 
     <BoxView HeightRequest="{Binding NormalSize}" WidthRequest="{Binding NormalSize}" /> 
    </BoxView> 
</ContentPage> 

然後在您的視圖模型類:

public class MyViewModel 
{ 
    public double NormalSize { get { return 40; } } 
    public double HalfSize { get { return NormalSize/2; } } 
} 

當然任何邏輯可以用來計算大小。我傾向於在實際頁面代碼後面放置僅查看這樣的內容(即MyPage.xaml.cs文件),並使用ElementName將其綁定到目標元素(您的Page類),如下所示:

<BoxView HeightRequest="{Binding NormalSize, ElementName=Root}" ... /> 
相關問題