Ich habe festgestellt, dass bei der Auswahl eines Textfelds in WPF auf rot und mit einem Farbwähler zur Überprüfung der Farbe die Farbe auf # FF9999 ausgeblendet wurde.
Ich habe eine bestimmte Farbe, die mein Client für den Auswahlpinsel benötigt. Gibt es eine Möglichkeit zu berechnen, auf welche Farbe ich den SelectionBrush setzen soll, wenn der Text ausgewählt ist, wird die genaue Farbe angezeigt?
Momentan muss ich den Auswahlpinsel als # 6599D1 haben, aber einmal eingestellt, ist die Farbe # C1D6ED.
Wie kann ich die Anfangsfarbe berechnen, so dass die Endfarbe genau das ist, was ich brauche?
Im Anschluss an die Antwort von H.B.
Ich habe die Deckkraft mit der folgenden Formel in der Vergangenheit berechnet
%Vor%welches zu
invertiert %Vor%% ce_de% hat standardmäßig TextBox
auf Weiß und Background
auf 0.4 gesetzt.
Als H. B. erklärt, Sie können Ihre Farbe mit diesen Standardeinstellungen nicht erreichen, da der Rotwert als -130 ausgegeben wird. Damit haben Sie 3 Optionen, Ändern SelectionOpacity
, ändern Background
oder tun Sie es nicht:)
Ändern der SelectionOpacity
ist wahrscheinlich nicht etwas, das Sie tun möchten, so dass Option 2, ändern Sie TextBox Background
Wir wollen nicht, dass Rot unter 0 geht, also
%Vor%was
ergibt %Vor% Dies ergibt 0,604. Mit diesem SelectionOpacity
-Wert können Sie berechnen, dass SelectionOpacity
auf SelectionBrush
gesetzt werden muss, um #0056B3
zu werden, sobald die Opazität angewendet wurde.
So sieht% ce_de% mit diesen Werten aus
%Vor%
Gute Frage, aber ich denke, das ist unmöglich. Wenn in der ControlTemplate eine Überlagerung vorhanden ist, können Sie keine Funktion definieren, die eine dunklere Farbe berechnet, die dann als die beabsichtigte Farbe endet.
z.B. Wenn du rot eingibst: 255,0,0
bekommst du 255,153,153
, jetzt müsste die Funktion, die auf deine ursprüngliche Farbe angewendet werden müsste, das Rot abdunkeln, dies könnte natürlich nur im roten Kanal als grün und Blau ist schon Null. Das Problem ist jedoch nicht der rote Kanal (der als 255 endet und daher nicht betroffen ist), so dass alle Änderungen nur dazu dienen, die Farbe noch mehr zu entsättigen anstatt sie zu verdunkeln.
Bearbeiten: Um dies etwas mathematischer zu machen, ist die Funktion, die durch die Transparenz der Auswahl angewendet wird,:
f (x) = 0,4 x + 153
Wenn Sie dies auf alle Kanäle Ihrer Farbe anwenden, werden Sie sehen, dass dies tatsächlich der Fall ist. Wie bekommen wir die Werte, die wir wollen? Ganz einfach, wir invertieren die Funktion, nämlich:
f ^ (- 1) (x) = -2,5 (153,0 - x)
Großartig! Jetzt können wir das auf Ihre Farbe anwenden:
R: -130.0
G: 0
B: 140
Hmm, nicht so toll, denke ich.
Dieser negative Wert ist genau das, warum dies nicht immer möglich ist, jede Farbe, deren Komponenten unter 153
sind, ist nicht reversibel.