进度条前景色

有没有人知道如何更改WPF-Progressbar的前景色。 它似乎总是与绿色合并。

不幸的是,它是默认样式的硬编码:

  

您可以从原始XAML创建自己的样式,或尝试覆盖Loaded事件中的背景,例如:

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

但它不可靠

试试看吧

   

如果它不能按您的要求工作,则必须修改Progressbar的Style或ControlTemplate。

要做到这一点,您可以使用Microsoft的Expression Blend,或者您可以获得现有模板的副本并进行修改。

为什么不采取低阻力的路径并使用流行的MahApps库?

  1. 获取MahApps库: https ://www.nuget.org/packages/MahApps.Metro
  2. 设置命名空间: xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"

  3. 添加’MetroProgressBar’

       
  4. 将“前景”设置为您喜欢的颜色

Marat Khasanov指出,不需要的绿色色调来自控件模板中名为“Animation”的对象。 所以另一种简单的方法是隐藏该对象。 这也将禁用动画“发光”效果,我认为这是一种资产,但您可能会将其视为交易杀手。 我通过Loaded事件的处理程序实现了这个,如下所示。

这是受到另一个问题答案的启发。 同样的警告适用:如果他们更改控件模板,那么这可能不再有效。

  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; } 

当Windows视觉设置进行了优化以获得最佳性能时,我遇到了类似的问题(控制面板 – >系统 – >高级系统设置 – >高级 – >性能 – >设置 – >视觉效果 – >调整以获得最佳性能)。 进度条在正常设置下看起来很好,但在“最佳性能”下可怕。 我刚刚将ForeGround改为“LightGreen”。

这是我在正常情况下在默认ForeColor上看到的内容

在此处输入图像描述

这是我在调整以获得最佳性能时看到的内容

在此处输入图像描述

这是改变

 //before  //after  

这是我在调整以获得最佳性能后看到的内容

在此处输入图像描述

更多细节: http : //justmycode.blogspot.com.au/2012/08/the-case-of-strangely-coloured.html

我发现覆盖整个风格非常有用。 您可以使用任何控件拉出控件模板样式

 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); 

进度样式(带有一些格式)如下所示:

                                                                                                       

使用样式并根据您的要求进行自定义