进度条前景色
有没有人知道如何更改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库?
- 获取MahApps库: https ://www.nuget.org/packages/MahApps.Metro
-
设置命名空间:
xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
-
添加’MetroProgressBar’
-
将“前景”设置为您喜欢的颜色
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);
进度样式(带有一些格式)如下所示:
使用样式并根据您的要求进行自定义