es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Color predeterminado del botón cuando el ratón está saliendo en WPF.

Estoy intentando cambiar el color de varios botones cuando el Mouse entra en esos botones a través del remitente del evento.

Funciona perfectamente, pero me gustaría saber si, cuando se desencadena el evento de Mouse saliendo, si existe algo así como un método “botón de color predeterminado” en lugar de cambiar el color mediante el código hexadecimal o algo así.

En realidad, cuando el Mouse está sobre cualquier botón (mis botones son elipses):

private void ButtonsOvering_MouseEnter(object sender, MouseEventArgs e)
{
(sender as Ellipse).Fill = Brushes.IndianRed;
}

Y, cuando el Mouse sale de cualquier botón:

private void ButtonsLeaving_MouseLeave(object sender, MouseEventArgs e)
{
Color yoloColor = new Color();
yoloColor = (Color)ColorConverter.ConvertFromString(“”#FF252424”);
SolidColorBrush namasteColor = new SolidColorBrush(yoloColor);
(sender as Ellipse).Fill = namasteColor;
}

el #FF252424 es el color predeterminado que di para la mayoría de mis botones, así que en este caso, al salir del botón con mi mouse, el botón tendrá el mismo color que cuando mi mouse no estaba sobre él.

Pero como tengo otros botones con otro color predeterminado que les di, no quiero crear más líneas de código para decir que cambie el color con otro código hexadecimal cuando mi mouse salga de los botones.

¿Existe un método o algo así como un Default.Color.Button en WPF?

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hasta donde yo sé, no hay un método integrado de “botón de color predeterminado” en WPF. Sin embargo, puedes crear tu propio método para establecer el color de relleno de un botón en su valor predeterminado.

    Una manera de hacerlo es definir una propiedad adjunta personalizada en tus botones de Elipse que contenga el color de relleno predeterminado para cada botón. Luego, puedes usar esta propiedad en el controlador de eventos MouseLeave para restablecer el color de relleno a su valor predeterminado. Aquí tienes un ejemplo:

    Primero, define la propiedad adjunta personalizada en una clase estática:

    public static class ButtonProperties
    {
        public static readonly DependencyProperty DefaultFillColorProperty =
            DependencyProperty.RegisterAttached("DefaultFillColor", typeof(Brush), typeof(ButtonProperties),
                new FrameworkPropertyMetadata(Brushes.Transparent));
    
        public static Brush GetDefaultFillColor(DependencyObject obj)
        {
            return (Brush)obj.GetValue(DefaultFillColorProperty);
        }
    
        public static void SetDefaultFillColor(DependencyObject obj, Brush value)
        {
            obj.SetValue(DefaultFillColorProperty, value);
        }
    }
    

    A continuación, establece el color de relleno predeterminado para cada botón en XAML estableciendo la propiedad adjunta:

    <ellipse width="50" height="50" fill="#FF252424" local:buttonproperties.defaultfillcolor="#FF252424" mouseenter="ButtonsOvering_MouseEnter" mouseleave="ButtonsLeaving_MouseLeave"></ellipse>
    

    Finalmente, utiliza la propiedad adjunta en el controlador de eventos MouseLeave para restablecer el color de relleno:

    private void ButtonsLeaving_MouseLeave(object sender, MouseEventArgs e)
    {
        var button = (Ellipse)sender;
        var defaultColor = ButtonProperties.GetDefaultFillColor(button);
    
        button.Fill = defaultColor;
    }
    

    Con esta configuración, solo necesitas establecer el color de relleno predeterminado una vez para cada botón, y el controlador de eventos MouseLeave restablecerá automáticamente el color de relleno a su valor predeterminado.

Comments are closed.