Windows 8 WPF进度条没有发光动画

时间:2013-07-16 08:51:20

标签: wpf windows-8 wpf-controls

Windows窗体应用程序中的进度条具有标准的“闪耀”动画,但是当我尝试在WPF中添加进度条时,默认情况下我没有得到这样的东西。我们如何在Windows 8中使用WPF获得此功能?

Windows窗体

WPF

3 个答案:

答案 0 :(得分:2)

这是一个相当古怪的修复,但您需要在应用程序中启用Windows窗体样式才能使用“光泽”。我就是这样做的。

  1. 将项目中的引用添加到System.Windows.Forms
  2. 转到项目设置页面,然后点击View Application Events
  3. 使用以下代码向您的Application.Startup添加处理程序(在VB.NET中,C#类似)(另外,如果您需要包含参数,请执行此操作)
  4. Class Application
    
        ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException
        ' can be handled in this file.
    
        Private Sub Application_Startup() Handles Me.Startup
            System.Windows.Forms.Application.EnableVisualStyles()
        End Sub
    
    End Class
    

    为了让 WPF 进度条正常工作,你必须调用它似乎很奇怪,但代码对我有效。

答案 1 :(得分:1)

如果你想要最终控制外观(即指示灯的颜色),我已经调整了一个我在另一个SO帖子上找到的控件,它提供了几乎相同的显示。

TWEAK:

<Grid Background="LightGray">
    <Grid Width="{Binding ProgressBarWidth, ElementName=uc}" HorizontalAlignment="Left">
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Rectangle.Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Background.(GradientBrush.GradientStops)[1].(GradientStop.Offset)" From="-1" To="0" Duration="0:0:1.5" RepeatBehavior="Forever"/>
                        <DoubleAnimation Storyboard.TargetProperty="Background.(GradientBrush.GradientStops)[2].(GradientStop.Offset)" From="0" To="1" Duration="0:0:1.5" RepeatBehavior="Forever"/>
                        <DoubleAnimation Storyboard.TargetProperty="Background.(GradientBrush.GradientStops)[3].(GradientStop.Offset)" From="1" To="2" Duration="0:0:1.5" RepeatBehavior="Forever"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>
        <Grid.Background>
            <LinearGradientBrush>
                <GradientStop Color="#FF218ED6" Offset="0.0" />
                <GradientStop Color="#FF4BA5E0" Offset="0.4" />
                <GradientStop Color="#FF8ECCF5" Offset="0.5" />
                <GradientStop Color="#FF4BA5E0" Offset="0.6" />
                <GradientStop Color="#FF218ED6" Offset="1.0" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>
</Grid>

全面实施:

Progress bar style in WPF is old fashioned. Increments in Bars. How to implement a progress bar with vista or windows-7 shady glow effect?

预览:

enter image description here

答案 2 :(得分:0)

Milliron X answer没有帮助我,所以我不得不使用Windows窗体ProgressBar而不是使用自定义控件重新发明轮子。

实现这一目标:

  1. 添加对WindowsFormsIntegrationSystem.Windows.Forms程序集的引用。
  2. 将以下命名空间添加到Window元素

    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    
  3. ProgressBar添加到WindowsFormsHost控件。例如

    <WindowsFormsHost Margin="0,10,0,0">
        <wf:ProgressBar x:Name="DownloadProgressBar" Width="500" Height="50" />
    </WindowsFormsHost>
    
  4. 我们的ProgressBar不要看“旧式”,您需要在输入点添加以下行(例如Main方法或Application.OnStartUp方法):

    System.Windows.Forms.Application.EnableVisualStyles();