none
Farbe für xaml - value im codebehind festlegen RRS feed

  • Frage

  • Hallo,

    ich möchte je nach einem bestimmten Wert an verschiedenen Stellen in meinem xaml eine bestimmte Farbe verwenden.

    z.Bsp. Brushes myColor = Brushes.Blue oder myColor = Brushes.Red, etc.

    Die Farbe möchte ich aber vorher (vor InitializeComponent())
    und zentral festlegen (zentral, so dass ich sie in allen Pages verwenden kann).

    Mein Gedanke ist es, in MainWindow.xaml.cs die Farbe zu wählen (myColor = Brushes.Violet)
    und diese dann in den xaml's zu nutzen:

    <Setter Property="Background" Value="myColor" />
    <GridSplitter Background="myColor" />

    Ohne es zu testen gehe ich davon aus, dass es so nicht funktioniert.

    Aber wie kann dies funktionieren?


    www.energiewende-mach-ich-selbst.de


    • Bearbeitet frank me Donnerstag, 22. Januar 2015 16:39
    Donnerstag, 22. Januar 2015 16:38

Antworten

  • Du kannst eine Themenfarbe für deine Anwendung erstellen, in dem du diese vorher global definierst.

    dazu gehst du in die App.xaml und fügst dann folgendes ein:

    <Application.Resources>
        <ResourceDictionary>
    
          <SolidColorBrush x:Key="myAppThemeS">#666666</SolidColorBrush>
    
          <!-- Wenn du weitere Ressourcen einfügen willst.
          <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ui.xaml" />
          </ResourceDictionary.MergedDictionaries>-->
        </ResourceDictionary>
    </Application.Resources>

    In den anderen .XAML-Datein kannst du diesen Wert dann verwenden:

    <Grid Background="{StaticResource myAppThemeS}" ></Grid>
    Wenn ich mich recht erinnere müsste es so klappen ;)



    © 2015 Thomas Roskop

    Germany // Deutschland

    Donnerstag, 22. Januar 2015 17:08
  • Hallo zusammen,

    ich möchte noch ergänzen das du hier auch prima dynamische Ressourcen verwenden kannst. Diese funktionieren grundsätzlich wie die statischen:

    <Grid Background="{DynamicResource MyBrush}">
    Damit hast du den Vorteil, dass du die Ressource nur einmal ändern musst und sich die Verweise überall automatisch aktualisieren:
    Application.Current.Resources["MyBrush"] = Brushes.Red;
    //Geht auch für lokale Ressourcen, dann über das jeweilige Resources-Dictionary
    Bei Animationen klappt das leider nicht. Diese benötigen statische Werte. IMHO gibt es diese Bindungsart auch nur unter WPF - so ziemlich überall anders müsstest du statische Ressourcen oder ThemeRessources nutzen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Donnerstag, 22. Januar 2015 19:17
    Moderator

Alle Antworten