Ich habe ein CustomControl, das von einem Button abgeleitet ist. An bestimmten Punkten in der Lebensdauer dieses Steuerelements möchte ich den Hintergrund auf eine spezielle Farbe (z. B. Pflaume) oder eine normale Steuerfarbe einstellen (das entspricht der Standardfarbe für andere Tasten). Hier ist der relevante Code, der meistens funktioniert.Hintergrund/Rahmen einer Schaltfläche abgeleitet CustomControl
public partial class MySpecialButton : Button
{
private void SetButtonState()
{
if (isSpecial && Enabled)
{
BackColor = Color.Plum;
}
else
{
BackColor = Enabled ? SystemColors.Control : SystemColors.ControlDark;
}
}
}
Dies hat mehrere Probleme:
Wenn meine Kontrolle aktiviert ist und nicht in Spezialmodus, wobei die Steuer Farbe, die auf die Taste mit scheint zu hell im Vergleich zu anderen Tasten gezogen wird. Sie können dies in der folgenden Abbildung sehen, wo die "Create Default" -Schaltfläche eine normale Schaltfläche mit der Standardfarbe ist und die "Read From Device" -Schaltfläche meine spezielle Schaltfläche mit der auf SystemColors.Control eingestellten Hintergrundfarbe ist. Warum sind die zwei Farben unterschiedlich?
Wenn mein Steuerelement mit einer Hintergrundfarbe mit dem obigen Code gezeichnet wird, scheint es einen Rand um die Schaltfläche, die ich nicht will. Zum Beispiel hat der "Read From Device" -Button im obigen Bild eine ziemlich dicke Umrandung von etwas, das wie eine Kontrollfarbe aussieht.
Wenn mein Steuerelement mit dem zugrunde liegenden Button.Enabled = false gezeichnet wird, hat die Farbe nicht die gleiche Farbe wie die Standardfarbe für deaktivierte Schaltflächen. Sie können das im Bild unten sehen. Die Farbe des Steuerelements "Write To Device" ist zu dunkel im Vergleich zu der Schaltfläche "Save To Computer", beide mit Enabled = false.
- Das deaktivierte Steuerelement hat die falsche Vordergrundtextfarbe. Wie kann ich den Mechanismus der Basisklasse nutzen, um den Text/background/border/etc richtig zu zeichnen?