2011-08-11 19 views
8

Me he dado cuenta al establecer la selección de un cuadro de texto en wpf en rojo, y usando un selector de color para verificar el color, el color se desvaneció a # FF9999.calcule el color del pincel de selección en WPF

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?

+1

¿Puede dar un código que utilizó para definir el color? – Jakub

+0

Sospecho que su color se está haciendo semitransparente, y necesita hacerlo opaco. Sin ver cómo estás cambiando el color, no tengo una manera fácil de sugerir más que eso. –

+0

No ayuda si está intentando hacer un estilo altamente personalizado, pero prefiero dejar los colores predeterminados del sistema y, al crear controles personalizados, tomar prestados los colores predeterminados del sistema de contextos similares. Esto es útil para la compatibilidad con los modos de accesibilidad de Windows, y lo hace para que los usuarios puedan usar las capacidades del tema de la ventana sin causar desagradables choques visuales. –

Respuesta

2

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.

p. Ej. cuando ingresas rojo que es: 255,0,0 obtienes 255,153,153, ahora la función que necesitaría aplicarse a tu color inicial necesitaría oscurecer el rojo, esto por supuesto solo podría hacerse en el canal rojo ya que el verde y el 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 mathmatical, 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 sencillo, invertimos la función, que es la siguiente:

f^(- 1) (x) = -2.5 (153,0 - x)

Gran! Ahora vamos a aplicar eso a su color:

R: -130,0
G: 0
B: 140

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

Este valor negativo es exactamente la razón por la que esto no siempre es posible, cada color que tiene componentes por debajo de 153 no es reversible.

3

El seguimiento de la respuesta por H.B.

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

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

que invierte a

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

El TextBox tiene por defecto Background conjunto en blanco y SelectionOpacity establecido en 0.4.
Como H.B. explicado, no puede lograr su color con estos ajustes predeterminados ya que el valor Rojo saldrá como -130. Esto le deja con 3 opciones, cambiar Background, cambie SelectionOpacity o que no lo haga :)

Cambio de la TextBox Background probablemente no es algo que quiere hacer lo que deja la opción 2, el cambio SelectionOpacity

Nos don' quiero Roja para ir por debajo de 0 por lo

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

que da

1 - (101/255) = Opacity 

Esto se traduce en 0,604 s o con este valor SelectionOpacity puede calcular que el SelectionBrush debe establecerse en #0056B3 para convertirse en #6599D1 una vez que se haya aplicado la Opacidad.

Así es como el aspecto TextBox con estos valores

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

enter image description here

+0

Idea interesante, pero el texto ciertamente se vuelve significativamente menos legible a valores tan altos. –

+0

@HB: Seguro, todo el 'TextBox' se ve un poco disortado o borroso en la Imagen (es un poco mejor en la aplicación) pero sí, es más difícil de leer –

+0

No importa mi último comentario ... se veía borrosa en mi computadora con Windows 7, pero desde otra computadora se ve nítida ... –

Cuestiones relacionadas