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" />