Color de primer plano de Progressbar

¿Alguien sabe cómo cambiar el color de primer plano de una barra de progreso de WPF? Siempre parece estar fusionado con verde.

Lamentablemente, está codificado en el estilo predeterminado:

  

Puede crear su propio estilo a partir del XAML original o intentar anular el fondo en el evento Loaded, por ejemplo:

 private void ProgressBar_Loaded(object sender, RoutedEventArgs e) { var p = (ProgressBar)sender; p.ApplyTemplate(); ((Panel)p.Template.FindName("Animation", p)).Background = Brushes.Red; } 

pero no es confiable

solo intenta con esto

   

Si no está funcionando como lo requería, debe modificar el Estilo o la Plantilla de Control de la barra de progreso.

Para hacerlo, puede usar Expression Blend de Microsoft o puede obtener una copia de la plantilla existente y modificarla.

¿Por qué no tomar una ruta de baja resistencia y utilizar la popular biblioteca MahApps ?

  1. Obtenga la biblioteca MahApps: https://www.nuget.org/packages/MahApps.Metro
  2. Configure el espacio de nombres: xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"

  3. Agregar el ‘MetroProgressBar’

       
  4. Establezca el “primer plano” a su color favorito

Marat Khasanov señaló que el tinte verde no deseado proviene del objeto llamado “Animación” dentro de la plantilla de control. Entonces, otro enfoque fácil es ocultar ese objeto. Esto también deshabilitará el efecto animado de “resplandor”, que considero un activo, pero es posible que vea como un asesino de tratos. Implementé esto a través de un controlador para el evento Loaded como se muestra a continuación.

Esto fue inspirado por una respuesta a otra pregunta . Se aplica la misma advertencia: si cambian la plantilla de control, es posible que ya no funcione.

  public void ProgressBar_Loaded(object sender, RoutedEventArgs e) { var progressBar = sender as ProgressBar; if (progressBar == null) return; var animation = progressBar.Template.FindName("Animation", progressBar) as FrameworkElement; if (animation != null) animation.Visibility = Visibility.Collapsed; } 

Me encontré con un problema similar cuando la configuración visual de Windows se optimizó para obtener el mejor rendimiento (Panel de control -> Sistema -> Configuración avanzada del sistema -> Avanzado -> Rendimiento -> Configuración -> Efectos visuales -> Ajustar para obtener el mejor rendimiento). La barra de progreso se veía bien en la configuración normal, pero horrible en “mejor rendimiento”. Cambié ForeGround a “LightGreen”.

Esto es lo que vi en ForeColor predeterminado en condiciones normales

enter image description here

Esto es lo que vi cuando se ajustó para un mejor rendimiento

enter image description here

Aquí está el cambio

 //before  //after  

Esto es lo que vi después cuando se ajustó para un mejor rendimiento

enter image description here

Algunos detalles más: http://justmycode.blogspot.com.au/2012/08/the-case-of-strangely-coloured.html

Me pareció bastante útil anular todo el estilo. Puede extraer los estilos de plantilla de control de cualquier control con

 var yourcontrol = new ProgressBar(); // the control needs to load before it has a template. yourcontrol.Loaded += (sender,e) => { var str = new System.Text.StringBuilder(); using (var writer = new System.IO.StringWriter(str)) System.Windows.Markup.XamlWriter.Save(yourcontrol .Template, writer); System.Diagnostics.Debug.Write(str); }; // add it to your main grid, or some control thats loaded on screen. gridMain.Children.Add(yourcontrol); 

El estilo de progreso (con algún formato) sale como sigue:

                                                                                                       

Utilice el estilo y personalice según su requisito