wpf colors textbox brush

calcule el color del pincel de selección en WPF



colors textbox (2)

Me he dado cuenta al configurar la selección de un cuadro de texto en wpf a rojo, y utilizando un selector de color para verificar el color, el color se desvaneció a # FF9999.

Tengo un color específico que mi cliente necesita para el pincel de selección. ¿Hay alguna forma de calcular a qué color debo ajustar el selector de selección para que cuando se seleccione el texto, se muestre el color exacto?

Actualmente necesito tener el pincel de selección como # 6599D1, pero una vez configurado, el color es # C1D6ED.

¿Cómo puedo calcular el color inicial para que el color final sea el que necesito?


Buena pregunta, pero creo que esto es imposible. Si hay alguna superposición dentro de ControlTemplate, no puede formular una función que calcule un color más oscuro que luego terminará como el color deseado.

por ejemplo, cuando 255,0,0 rojo que es: 255,0,0 obtienes 255,153,153 , ahora la función que necesitaría aplicarse a tu color inicial debería oscurecer el rojo, esto por supuesto solo se podía hacer en el canal rojo como verde y azul ya son cero. Sin embargo, el problema no es el canal rojo (que termina en 255 y por lo tanto no se ve afectado), por lo que cualquier cambio en eso solo servirá para desaturar el color aún más en lugar de oscurecerlo.

Editar: para hacer esto un poco más matemático, la función que se aplica por la transparencia de la selección es:

f (x) = 0.4x + 153

Si aplica esto a todos los canales de su color, verá que este es realmente el caso. ¿Ahora cómo obtenemos los valores que queremos? Muy simple, invertimos la función, que es esta:

f ^ (- 1) (x) = -2.5 (153.0 - x)

¡Estupendo! Ahora apliquemos eso a su color:

R: -130.0
G: 0
B: 140

Hmm, no tan genial después de todo, supongo.

Este valor negativo es exactamente por qué esto no siempre es posible, cada color que tiene componentes por debajo de 153 no es reversible.


Seguimiento de la respuesta de HB

He calculado la opacidad con la siguiente fórmula en el pasado

Red = OriginalRed * Opacity + (1-Opacity) * BackgroundRed

que se invierte a

(Red - (1-Opacity) * BackgroundRed) / Opacity = OriginalRed

TextBox tiene el Background predeterminado configurado en Blanco y SelectionOpacity establecido en 0.4.
Como explicó HB, no puede lograr su color con estos ajustes predeterminados ya que el valor Rojo saldrá como -130. Esto te deja con 3 opciones, Cambiar Background , cambiar SelectionOpacity o no hacerlo :)

Cambiar el TextBox Background del TextBox Background probablemente no sea algo que quieras hacer, por lo que deja la opción 2, cambia SelectionOpacity

No queremos que Red vaya por debajo de 0 entonces

(101 - (1-Opacity) * 255) = 0

lo que da

1 - (101/255) = Opacity

Esto da como resultado 0.604, por lo que con este valor de SelectionOpacity puede calcular que SelectionBrush debe establecerse en #0056B3 para convertirse en #6599D1 una vez que se haya aplicado la Opacidad.

Así es como se ve el TextBox con estos valores

<TextBox SelectionBrush="#0056B3" SelectionOpacity="0.604" />