WPF中的进度条样式是老式的。 酒吧的增量。 如何使用vista或windows-7阴影发光效果实现进度条?

WPF中的进度条样式是老式的。 酒吧的增量。 如何使用vista或windows-7阴影发光效果实现进度条?

图片http://sofzh.miximages.com/c%23/2.JPG

甚至检查了Progressbar的属性。 但是,没有与发光效果相关的属性。

此外,是否有任何动画或与正常进度条不同的东西/

谢谢Adv。

编辑代码

  

滚你自己不应该太难。

创建一个具有标准进度条属性的usercontrol

 Value Maximum Minimum 

您可以使用以下公式创建一个派生属性来计算条形图的大小:

 ProgressBarWidth = (Value / (Maximum + Minimum) * ControlWidth) - Padding 

更新值,最大值或最小值时会发生更改

将其绑定到进度条控件模板中“条形图”的宽度 – 这样,当Value属性更新时,进度条将resize。

你的酒吧看起来如何取决于你,但我猜你只想要一些花哨的填充/渐变/发光效果 – 你可以在Blend中添加它们

免责声明:公式可能不正确!

如果你想尝试自己滚动,这里有一个我刚刚敲了一下似乎工作正常

 public partial class MyProgressBar : UserControl { public MyProgressBar() { InitializeComponent(); Loaded += new RoutedEventHandler(MyProgressBar_Loaded); } void MyProgressBar_Loaded(object sender, RoutedEventArgs e) { Update(); } private static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(double), typeof(MyProgressBar), new PropertyMetadata(100d, OnMaximumChanged)); public double Maximum { get { return (double)GetValue(MaximumProperty); } set { SetValue(MaximumProperty, value); } } private static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(double), typeof(MyProgressBar), new PropertyMetadata(0d, OnMinimumChanged)); public double Minimum { get { return (double)GetValue(MinimumProperty); } set { SetValue(MinimumProperty, value); } } private static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(MyProgressBar), new PropertyMetadata(50d, OnValueChanged)); public double Value { get { return (double)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } } private static readonly DependencyProperty ProgressBarWidthProperty = DependencyProperty.Register("ProgressBarWidth", typeof(double), typeof(MyProgressBar), null); private double ProgressBarWidth { get { return (double)GetValue(ProgressBarWidthProperty); } set { SetValue(ProgressBarWidthProperty, value); } } static void OnValueChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { (o as MyProgressBar).Update(); } static void OnMinimumChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { (o as MyProgressBar).Update(); } static void OnMaximumChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { (o as MyProgressBar).Update(); } void Update() { // The -2 is for the borders - there are probably better ways of doing this since you // may want your template to have variable bits like border width etc which you'd use // TemplateBinding for ProgressBarWidth = Math.Min((Value / (Maximum + Minimum) * this.ActualWidth) - 2, this.ActualWidth - 2); } } 

XAML

                          

结果:

进度条......自家种植!

就像我说的那样,这样的事情很容易,但仍然考虑重新定义模板或使用原始模板,因为它确实支持正确操作系统上的shiny

这是在我添加’Percent’依赖项属性并绑定到控件模板中的属性之后:

家里种的数量!

更新Percent代码是

  Percentage = Math.Min((int)(Value / (Maximum + Minimum) * 100), 100); 

编辑2:

我弄乱了填充物,并添加了一个白色的内边框,使它看起来更有光泽。 唯一缺少的是shiny的动画

顶部是我的控件,底部是默认的WPF

请记住,只需编辑进度条控件模板即可实现所有这些function

噢光亮......

这是更新的XAML:

                                     

您需要在Windows的个性化设置中使用Aero主题(即Windows 7 Basic或Windows 7)才能获得平滑的进度条和动画效果。

Vista和Windows 7都有Aero主题。 Windows XP发布时甚至不存在。 它也在Windows 8中被删除,以获得更全面的标准外观。 如果您切换到Windows Classic,那么您将获得旧的粗块以查找进度条。

WPF为Luna,Aero,Royale,Classic定义了一组不同的模板…..它的function是查看系统当前使用的主题,然后这将决定使用哪一组WPF模板。

因此,当您使用XP时,它永远不会有机会使用Aero模板集。

如果出于某种原因,即使Windows未使用Aero主题,您也希望以Aero外观为主题,那么有两个主要解决方案。

解决方案:

您可以强制WPF应用程序将Aero主题的WPF模板用于其所有控件:

要么

如果您不希望所有应用程序控件都以Aero为主题,那么只需从Aero主题资源中获取定义ProgressBar的Aero外观的样式/模板,然后将其应用于ProgressBar。

  • 我在哪里可以下载Microsoft的标准WPF主题?

希望无论哪种方式都能让你获得发光进度条….注意,我没有XP来测试是否是这种情况。

如果要更改进度条的外观,则必须重新定义其(控制)模板。
ms在此解释:
http://msdn.microsoft.com/en-us/library/ms750638.aspx
在编写模板时,为了获得发光,您可以使用BitmapEffect,使用OuterGlowBitmapEffect(!软件渲染),但Best是使用效果(更新)。

如果您使用进度条的效果并且它适合您,可能您不必重新定义模板。

请注意,您的网络应用程序具有良好的免费主题。

您可以使用以下内容模仿动画,这是对已接受答案的调整:

                         

预习:

在此处输入图像描述