Eleкtro:
¿has notado que al poner el tema dark y pasar las letras a color blanco, cuando ponés el puntero sobre el control de menu principal ya no se lee bien?
Efectivamente, me percaté de esa pequeña imperfección visual, pero al ser muy pequeña dicha imperfección, lo dejé estar así...
El problema que estás describiendo es que, al cambiar el tema visual del programa a "Dark" y seguidamente posicionar el cursor del mouse sobre alguno de los botones principales de cada menú ("File", "Settings" y "About..."), el color de resaltado (o
highlight) de dicho botón dificulta en gran medida la visualización del texto.
Te explico acerca del problema (si no quieres leer explicaciones, puedes saltar hasta el penúltimo párrafo de este
post en donde te explico acerca de la solución que le daré)...
La tecnología Windows Forms (en la que ha sido desarrollada este programa) tiene muchas limitaciones en lo que respecta a la personalización/colorización de los controles y componentes integrados (o
built-in). La mayoría de controles y componentes integrados en WinForms no proveen las suficientes propiedades para personalizar absolutamente todos los colores que nos gustarían para poder sustituir todas las métricas de colores del estilo visual actual del sistema operativo para nuestra aplicación.
Más allá de exponer un par de propiedades para modificar el color de la fuente de texto y el color de fondo de cada control, la mayoría de controles se quedan solo en ese par de personalización de color, y esto hace que a largo plazo, por circunstancias al verse así de limitado, surja la necesidad de reimplementar "X" control para poder llevar a cabo personalizaciones más drásticas de color mediante técnicas de dibujado con GDI/GDI+...
¿Nunca has escuchado a un programador de .NET recomendarle a otro programador también de .NET que desarrolle su aplicación bajo la tecnología WPF si necesita llevar a cabo personalizaciones de color? (o tareas de dibujado en general). Es algo que los programadores anclados a WinForms solemos escuchar, y tienen muy buenos motivos para decirlo. (la personalización en WPF mediante plantillas es algo maravillosamente dinámico)
Vease un ejemplo de un control personalizado de tipo
ListBox (WinForms) que publiqué en el foro:
No es nada del otro mundo como para tirar cohetes, solo es un control colorido, pero es un ejemplo que sirve para explicar que ese tipo de personalización de colores es tecnicamente imposible hacerla mediante los miembros que el control (
ListBox) provee por defecto.
La solución en la mayoría de casos es relativamente simple: declarar una clase con una herencia de la clase del control, y sustituir los invocadores de eventos heredados (uno de los más comunes por el que guiarse:
Control.OnPaint()) para llevar a cabo las tareas de dibujado personalizadas.
En otros casos más complicados se necesita una reimplementación completa del control. O mejor dicho, diseñarlo desde cero.
Quizás me he extendido demasiado en la explicación. Bueno, el caso es que para esos menús que indicas, ocurre lo mismo. El color de resaltado del botón no puedo cambiarlo (bueno, si, pero no de forma guiada) para adaptarlo al contraste de un color de fuente más oscuro o más claro. Lo controla totalmente el estilo visual actual del sistema operativo ya que el control no me lo permite controlarlo por mi mismo. Aunque por otro lado, la librería de clases de .NET Framework provee una clase con nombre '
VisualStyleRenderer' que si me permitiría llevar a cabo las personalizaciones necesarias de color de ese menú, pero sinceramente esto es bastante tedioso de elaborar, demasiado trabajo solo para solucionar una pequeña imperfección visual, y por ese motivo no me apeteció llevar a cabo este tipo de solución. También por el afán de compartir con los demás un código reusable (en el código fuente, hay mucho código reusable) para poder cambiar el tema visual de cualquier otra aplicación simplemente llamando a un método, sin necesidad de tener que elaborar personalizaciones más específicas/inteligentes para cada tipo de control y cada tipo de estilo o tema visual.
Sin embargo, lo que si podría hacer, y esto sería una solución muy sencilla (aunque mediocre), sería suscribirme a los eventos que se disparan cuando el cursor del mouse entra y sale de los límites de esos botones del menú, y entonces modificar el color de la fuente de texto del botón donde está posicionado el mouse. Así que me apunto este problema para solucionarlo en la próxima release del programa.
PD: para el desarrollo de aplicaciones a medida / comerciales, siempre uso el framework comercial de
Telerik, cuyos controles permiten todas las personalizaciones de color deseadas, y más. Pero cuando desarrollo y comparto software
open-source en GitHub, no puedo desarrollar el programa bajo este framework comercial por obvias condiciones legales, y por ende al final no me apetece esforzarme demasiado en la colorización de la UI, por que con los controles built-in de WinForms siempre habrá grandes limitaciones en este aspecto...
Además, en mi framework comercial
DevCase tengo implementados una gran variedad de controles con un alto nivel de personalización de colores, pero claro, tampoco puedo desarrollar aplicaciones gratuitas y publicarlas en GitHub usando los controles de mi propio framework comercial ya que estaría regalando todo mi trabajo xD.
Bueno, con respecto a
Telerik, en realidad hice una única excepción y fue para publicar un programa participando en un concurso de programación del foro (el cual por cierto lo gané xD):
Pero jamás he vuelto a publicar un programa gratuito desarrollado con librerías de
Telerik por motivos legales. De lo contrario, mis interfaces de usuario serían más bonitas, con más colores... como @
Machacador me exije, jajaja.
Un saludo y gracias por opinar y por haber leido hasta aquí.