Pregunta

Estoy escribiendo algún comportamiento personalizado para un ToolStripDropDown de control.También me gustaría modificar el ToolStripDropDownButton sí mismo para mostrar de una forma coloreada.

Veo que puedo manejar la Paint evento y dibujar lo que me gusta.Sin embargo, hay alguna manera de tener el botón de pintura de fondo predeterminado antes de pintar la forma?Sería difícil obtener el fondo exactamente correcto, especialmente con las futuras versiones de .NET y Windows.

En la llanura ol' de Windows, yo podría invocar el defecto proc controlador antes o después de mi código de la pintura.Yo no estoy viendo alguna manera para lograr que en .NET.O tal vez hay una manera de saber el botón para pintar sólo el telón de fondo?

¿Fue útil?

Solución

A la hora de manejar el Paint evento (en oposición a la sustitución de la OnPaint método en una clase derivada) de la clase base (por defecto proc controlador) ya está recibiendo llamadas.Todo lo que se dibuja como algo normal, y entonces usted está dibujando en la parte superior de que en el Paint evento.Usted puede ver claramente aquí:

     Lime rectangle drawn over part of the drop-down button, clearly showing the default contents underneath

El truco es asegurarse de que usted deje suficiente del control del rectángulo de recorte expuestos a mostrar la parte que desee.El e.ClipRectangle propiedad recupera el todo botón del área de cliente, así que si usted acaba de
llenar con una muestra de color, usted va a cubrir la flecha de lista desplegable y de fondo por defecto, también.La anterior manifestación fue creado mediante la siguiente feo código de ejemplo:

private void ToolStripDropDownButton1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.FillRectangle(Brushes.Chartreuse,
                             e.ClipRectangle.X + 3, e.ClipRectangle.Y + 3,
                             e.ClipRectangle.Width - 12,
                             e.ClipRectangle.Height - 12);
}

Aparte de eso, yo no creo que haya una manera de personalizar lo que exactamente se dibuja por la clase base.El propietario de dibujo (al menos en WinForms) tiende a ser un todo-o-nada de romance.Usted consigue el control total,
pero se trata en el precio de tener que poner en práctica todo lo mismo.


Por supuesto, en caso de que usted no ha notado ya, el ToolStrip control ya no se ve como un nativo de control de Windows.Y aún peor, es siempre se va a ver exactamente el mismo que hace ahora,
incluso en futuras versiones de Windows que revisar completamente la interfaz de usuario.(El MenuStrip está plagada de
este mismo fenómeno, y la diferencia es muy visible en Windows Vista/7, donde la norma API menús han cambiado dramáticamente).La razón es que ambos controles son dibujados completamente en C# el código escrito en su WinForms implementaciones.Personalmente, creo que se ve ridículamente cursi, y no lo uso en uno de mis aplicaciones en una apuesta.

Usted puede asignar una costumbre renderizador que utiliza el UxTheme API para dibujar los botones, que se mucho más cerca de la aproximación de la mirada de los nativos de menús y barras de herramientas.Una bastante completa de la muestra está disponible aquí.He escrito algo muy similar para los WinForms desarrollo que he hecho que requieren las características adicionales de la ToolStrip clase (tales como la incrustación de los cuadros combinados) no son ofrecidos por el
de la vieja escuela MainMenu y ToolBar los controles que simplemente ajustar su API de Windows equivalentes.Al elegir hacer las cosas de esta manera, usted tiene más control sobre exactamente qué partes de la base de la clase renderer a la que desea llamar, como has escrito el código explícitamente a sí mismo.Muy recomendable si estás
el tipo que se preocupa en absoluto acerca de la interfaz de usuario, los nativos se sienten, o la experiencia de usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top