2017-01-11 7 views
0

Ich versuche, Xamarin (XAML) -Stile wie CSS zu denken und es nicht ganz das gleiche zu finden. Zum Beispiel, wenn ich möchte, dass alle Etiketten weiß sind, aber bestimmte Etiketten auf auch fett gedruckt werden, würde ich logisch denken, dass dies funktionieren würde.Xamarin Formen implizite/explizite Stile ... Vererbung

<ResourceDictionary> 
     <Style TargetType="Label"> 
      <Setter Property="TextColor" Value="White" /> 
     </Style> 
     <Style x:Key="LargeLabel" TargetType="Label"> 
      <Setter Property="FontAttributes" Value="Bold" /> 
     </Style> 
    </ResourceDictionary> 

und auf der Seite ...

<Label Text="Good Morning David!" Style="{StaticResource LargeLabel}" /> 

gibt jedoch, dass mir ein bolded black label. Ich würde erwarten, dass es stattdessen weiß ist.

Nach einigen Recherchen wurde vorgeschlagen, dass das Attribut BasedOn hilfreich sein kann. Die Technik besteht darin, einen expliziten Stil zu erzeugen, auf den sich der implizite Stil stützt. Das macht alle Labels weiß. Und dann können weitere explizite Stile auf demselben Elternelement basieren.

<ResourceDictionary> 
     <Style TargetType="Label" x:Key="DefaultLabelStyle"> 
      <Setter Property="TextColor" Value="White" /> 
     </Style> 
     <Style x:Key="LargeLabel" TargetType="Label" BasedOn="DefaultLabelStyle"> 
      <Setter Property="FontAttributes" Value="Bold" /> 
     </Style> 
     <Style TargetType="Label" BasedOn="DefaultLabelStyle" /> 
    </ResourceDictionary> 

und in der Seite der gleichen ...

<Label Text="Good Morning David!" Style="{StaticResource LargeLabel}" /> 

jedoch, die in fett gedruckten schwarzem Etikett führt nach wie vor statt einem bolded White-Label.

Gibt es eine Möglichkeit, dies in XAML/Xamarin Forms funktionieren zu lassen?

Antwort

1

BasedOn muss ein StaticResource pro Xamarin Documentation

Dies ist, wie ich es in meinen Projekten tun würde:

<ResourceDictionary> 
    <Style TargetType="Label" x:Key="DefaultLabelStyle"> 
     <Setter Property="TextColor" Value="White" /> 
    </Style> 
    <Style x:Key="LargeLabel" TargetType="Label" BasedOn="{StaticResource DefaultLabelStyle}> 
     <Setter Property="FontAttributes" Value="Bold" /> 
    </Style> 
</ResourceDictionary> 

My working source code example

+0

das ist es. Danke! –