2017-11-24 2 views
0

Ich habe ein Xamarin.Forms Projekt, und ich habe diesen Code in meiner App.xaml-Datei, die für alle meine „Navigationsleisten“Wechsel zwischen NavigationPage Arten dinamically/zur Laufzeit

<ResourceDictionary> 
     <Style TargetType="NavigationPage"> 
      <Setter Property="BarBackgroundColor" Value="Color.Purple"/> 
      <Setter Property="BarTextColor" Value="Color.white"/> 
     </Style>    
</ResourceDictionary> 

einen globalen Stil setzt aber jetzt, ich will, wie diese für diese Änderung in Beispiel

<ResourceDictionary> 
     <Style x:Key="PurpleStyle" TargetType="NavigationPage"> 
      <Setter Property="BarBackgroundColor" Value="Color.Purple"/> 
      <Setter Property="BarTextColor" Value="Color.white"/> 
     </Style> 

     <Style x:Key="BlueStyle" TargetType="NavigationPage"> 
      <Setter Property="BarBackgroundColor" Value="Color.Blue"/> 
      <Setter Property="BarTextColor" Value="Color.white"/> 
     </Style> 

     <Style x:Key="GreenStyle" TargetType="NavigationPage"> 
      <Setter Property="BarBackgroundColor" Value="Color.Green"/> 
      <Setter Property="BarTextColor" Value="Color.white"/> 
     </Style> 
</ResourceDictionary> 

der Auslöser zwischen einer Reihe von Arten ändern ist nur eine Taste in einem Content. Ich kann die Dinge nicht wie

NavigationPage.Style = App.Current.Resources["..."]; 

oder https://stackoverflow.com/a/26077999/5652250

verwenden, da die Seite, wo die Auslöser aktiviert nicht die NavigationPage ist oder eine Definition für den NavigationPage. Was kann ich tun?

Antwort

0

Es ist eine einfache und saubere Art und Weise zu erreichen, was ich versuche, hier zu tun:

nur den ersten Codeblock nehmen:

<ResourceDictionary> 
    <Style TargetType="NavigationPage"> 
     <Setter Property="BarBackgroundColor" Value="Color.Purple"/> 
     <Setter Property="BarTextColor" Value="Color.white"/> 
    </Style>    
</ResourceDictionary> 

Und ersetzt speziell die Werte, die Sie versuchen, machen dynamisch, wie folgt aus:

<ResourceDictionary> 
    <Style TargetType="NavigationPage"> 
     <Setter Property="BarBackgroundColor" Value="{DynamicResource PrimaryColor}"/> 
     <Setter Property="BarTextColor" Value="{DynamicResource SecondaryColor}"/> 
    </Style>    
</ResourceDictionary> 

Dann haben Sie ein PrimaryColor und SecondaryColor Ressourcen, die nur für den Wandel in jedem Ort Ihrer Anwendung in der Lage sind, indem Sie diese:

App.Current.Resources["PrimaryColor"] = App.Current.Resources["SecondaryColor"]; 
// or 
App.Current.Resources["SecondaryColor"] = Color.Black; 
Verwandte Themen