2017-08-10 71 views
0

對於我的應用程序,我有2個不同的左邊距和右邊距值。 (比方說27和64)xamarin表單從ResourceDictionary中獲取值

是否有可能從ResourcesDictionaty獲取這些值並將它們設置在我的XAML中。

例如

<StackLayout Margin="{Left1},0,{Right1},0"> 
</StackLayout> 

回答

1

可以在ResourceDictionary它們指定爲雙值,並指他們在其他資源/風格或元素的水平本身。

樣本資源詞典

<ResourceDictionary> 
    <!-- namespace declaration 
      xmlns:sys="clr-namespace:System;assembly=System.Runtime" --> 
    <sys:Double x:Key="leftMargin">20</sys:Double> 
    <sys:Double x:Key="rightMargin">30</sys:Double> 

    <Thickness x:Key="MyMargin1" 
     Left="{StaticResource leftMargin}" 
     Right="{StaticResource rightMargin}" 
     Top="20" 
     Bottom="30" /> 

    <Thickness x:Key="MyMargin2" 
     Left="{StaticResource leftMargin}" 
     Right="{StaticResource rightMargin}" 
     Top="5" 
     Bottom="15" /> 
</ResourceDictionary> 

使用範例

<StackLayout> 

    <BoxView BackgroundColor="Blue" Margin="{StaticResource MyMargin1}" /> 

    <BoxView HeightRequest="1" BackgroundColor="Black" /> 

    <BoxView BackgroundColor="Red" Margin="{StaticResource MyMargin2}" /> 

    <BoxView HeightRequest="1" BackgroundColor="Black" /> 

    <BoxView BackgroundColor="Yellow"> 
     <BoxView.Margin> 
      <Thickness 
       Left="{StaticResource leftMargin}" 
       Right="{StaticResource rightMargin}" 
       Top="30" 
       Bottom="10" /> 
     </BoxView.Margin> 
    </BoxView> 

    <BoxView HeightRequest="1" BackgroundColor="Black" /> 
</StackLayout> 

screenshot

+0

這是完美的!謝謝 – Dimitris

1

我不認爲這樣做單一數值會工作。但是,您可以結合整個Margin的值在資源字典如下:

<ResourceDictionary> 
    <Thickness x:Key="MyMargin">27,0,64,0</Thickness> 
</ResourceDictionary> 

<StackLayout Margin="{StaticResource MyMargin}"> 
</StackLayout> 
+0

這也將設置上邊距和下邊距!我不想那樣! – Dimitris

+0

然後將那些設置爲0.那應該達到你所尋找的不應該? –

+0

我不認爲你明白我的要求。我的網頁上有10個控件(例如)。第一個邊距20,1,20,4第二個,第二個20,12,20,5第三個......它們都有相同的左右邊距,但不是相同的頂部和底部邊距。同樣的事情發生在應用程序的所有頁面上。你的解決方案是解決左右,底部,頂部的一切。我不想那樣。 – Dimitris