Windows 8 WPF进度条不';我没有发光动画

Windows 8 WPF进度条不';我没有发光动画,wpf,windows-8,wpf-controls,Wpf,Windows 8,Wpf Controls,Windows窗体应用程序中的进度条具有标准的“shine”动画,但当我尝试在WPF中添加进度条时,默认情况下不会得到这样的效果。在Windows 8中,我们如何使用WPF恢复此功能 Windows窗体 WPF 这是一个相当奇怪的解决方案,但您需要在应用程序中启用Windows窗体样式以使用“gloss”。我是这样做的 在项目中将引用添加到System.Windows.Forms 转到项目设置页面,然后单击查看应用程序事件 使用以下代码(在VB.NET中,与C#类似)向应用程序添加处理程序。启

Windows窗体应用程序中的进度条具有标准的“shine”动画,但当我尝试在WPF中添加进度条时,默认情况下不会得到这样的效果。在Windows 8中,我们如何使用WPF恢复此功能

Windows窗体

WPF


这是一个相当奇怪的解决方案,但您需要在应用程序中启用Windows窗体样式以使用“gloss”。我是这样做的

  • 在项目中将引用添加到
    System.Windows.Forms
  • 转到项目设置页面,然后单击查看应用程序事件
  • 使用以下代码(在VB.NET中,与C#类似)向
    应用程序添加处理程序。启动
    (如果需要包含参数,也可以这样做)
  • 类应用程序
    '应用程序级事件,如启动、退出和DispatcherUnhandledException
    '可以在此文件中处理。
    私有子应用程序_Startup()处理我。Startup
    System.Windows.Forms.Application.EnableVisualStyles()
    端接头
    末级
    

    为了让WPF progressbar正常工作,你不得不调用它,这似乎很奇怪,但代码对我来说是可行的。

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

    调整:

    <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>
    
    
    
    全面实施:

    预览:

    对我没有帮助,所以我不得不使用Windows窗体
    ProgressBar
    ,而不是使用自定义控件重新设计轮子

    为实现这一目标:

  • 添加对
    WindowsFormsIntegration
    System.Windows.Forms
    程序集的引用
  • 将以下命名空间添加到
    窗口
    元素

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

    <WindowsFormsHost Margin="0,10,0,0">
        <wf:ProgressBar x:Name="DownloadProgressBar" Width="500" Height="50" />
    </WindowsFormsHost>
    

  • 注意:WPF在这里是正确的。Windows 8去掉了所有的光泽度。你必须重写ProgressBar的ControlTemplate并自己提供任何动画。丹尼尔,为什么Windows 8在这里有它?
    System.Windows.Forms.Application.EnableVisualStyles();