WPF Farbe eines Buttons auslesen

Gast #4809385
Lesenswert?

Hallo
Habe gerade mit WPF begonnen und habe das folgende Problem .Es ist zwar 
klar wie ich einem Button eine Hintergrundfarbe zuweise,aber wie bekomme 
ich diese Hintergrundfarbe voneinem beliebigeb Button btn

also :
         Color farbe    = Colors.Red;
         Button btn     = new Button();
         btn.Background = new SolidColorBrush(farbe);


dies funktioniert natürlich prächtig
Jetzt kenne ich natürlich die Hintergrundfarbe.Wollte ich sie aber aus 
welchen Gründen aus den Eigenschaften des Button auslesen und das 
eErgebniss einer Variablen zuweisen so stehe ich wie der Ochse vorm Tor.
Wer weiss  was

vielen Dank im Voraus

Manna
Gast #4809950
Lesenswert?

Hallo Dirk
vielen Dank für die prompte Antwort.

WPF ermöglicht es Code und Design strikt zu trennen.aber erlaubt genauso 
Steuerelemente 'on the fly' zu erzeugen und mit Eigenschaften zu 
versehen.
Apodiktisch zu verlangen diese Trennung von Code und Design stets 
konsequent zu verfolgen,würde meiner Meinung nach creatives,pfiffiges 
Programmieren erheblich einschränken,abgesehen davon,dass es auch 
garnicht möglich ist.

Ein kleines Beispiel wie es erfogreich funktioniert.
Ich habe über den Designer im MainWindow ein Canvas namens 'meinCanvas' 
plaziert.
Die MainWindow.xaml.cs sieht wie folgt aus

public MainWindow()
        {
            Button btn       = new Button();
            btn.Width        = 150;
            btn.Height       = 150;
            btn.Name         = "Dirk";
            // der Button ist unter dem Namen 'Dirk' ansprechbar");
            // jetzt verpasse ich dem Button ebenso problemlos eine 
Hintergrundfarbe
            btn.Background   = new SolidColorBrush(Colors.LightYellow);
            // den Namen des Buttons kann ich natürlich leicht ermitteln 
und auch ausgeben
            string Vorname   = btn.Name;
            MessageBox.Show(Vorname);
// meine Frage ist 'wie kann ich analog die Hintergrundfarbe auslesen'

            InitializeComponent();
            meinCanvas.Children.Add(btn);
            btn.Content      = "welche Farbe habe ich ??";
        };

nochmals vielen Dank
Manna
Gast #4810184
Lesenswert?

1
var buttonColor = (btn.Background as SolidColorBrush)?.Color;
2
if(buttonColor.HasValue)
3
{
4
  // sedezimal
5
  MessageBox.Show(buttonColor.ToString());
6
}

> aber erlaubt genauso Steuerelemente 'on the fly' zu erzeugen und mit
> Eigenschaften zu versehen.

Zum ersten Herumprobieren und Kennenlernen der Eigenschaften etc. ist 
das schon in Ordnung so. Ich würde aber zumindest erst 
InitializeComponent ausführen, bevor ich herumfummele (und den 
"Experimentalcode" in Button-Handler setzen, nicht in den Konstruktor).
Gast #4810473
Lesenswert?

Hallo und Dank an alle Teilnehmer dieser kleinen Debatte !

Der von mir beispielhaft angegebene Code ist nur schnell zur 
Verdeutlichung des Problems geschrieben worden und das Auslesen Der 
Hintergrundfarbe sollte eigentlich in einer ButtonHandler-Funktion 
erfolgen.

Doch noch einmal zum Grundsätzlichen.
Ich wollte WPF lernen,indem ich ein Soduku-Spiel programmiere.
Zuerst wollte ich das 9x9 Quadrat der Buttons im Designer 
zusammenbauen,bis ich mir sagte,dass dies wesentlich einfacher über zwei 
verschachtelte for-Schleifen im Code zu bewerkstelligen wäre.Dies hat 
sich dann auch bestens bewährt.
Das Grundgerüst für das Spiel also Spielfeld und diverse andere 
Steuerelemente habe ich allerdings 'konventionel! mit dem Designer 
erzeugt.Ausschliessliches Benutzen des Designers mit Xaml würde ich für 
dieses konkrete Problem als wenig vernünftig ansehen.
Da ich aber wie gesagt totaler Anfänger vor Allem bei WPF bin,möchte ich 
nicht völlig ausschließen,eine elegantere Lösung nicht zu kennen oder 
aber sie übersehen zu haben.

Gruss Manna

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren