Forum: PC-Programmierung WPF Farbe eines Buttons auslesen


von Manna (Gast)


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

von Dirk (Gast)


Lesenswert?

Hallo, das ist nicht wirklich WPF, wenn Du wirklich WPF benutzt, dann 
ist UI und Logic voneinander getrennt und du änderst das aussehen deines 
Buttons über Styles.

https://msdn.microsoft.com/de-de/library/bb613545%28v=vs.110%29.aspx

Wenn Du etwas ausholst und erklärst, wieso Du die Farbe benötigst, dann 
könnte man Dir besser helfen.

von Manna (Gast)


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

von D. I. (Gast)


Lesenswert?

Manna schrieb:
> würde meiner Meinung nach creatives,pfiffiges
> Programmieren erheblich einschränken

So kann man das natürlich auch ausdrücken. Architektur und Statik 
schränkt einem beim Hausbau auch nur unnötig in seinen kreativen und 
pfiffigen Ideen ein.

von Kippenhannes (Gast)


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).

von Manna (Gast)


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

von Manna (Gast)


Lesenswert?

Was ich noch vergessen hatte:
Die Lösung von  'Kippenhannes' ist genau das was ich wollte. Prima !!!

dafür vielen Dank
Manna

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.