4

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

Windows 窗体

WPF

4

3 回答 3

2

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

  1. 在您的项目中添加一个引用到System.Windows.Forms
  2. 转到项目设置页面,然后单击View Application Events
  3. 使用以下代码向您添加一个处理程序Application.Startup(在 VB.NET,C# 中类似)(另外,如果您需要包含参数,请执行此操作)
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进度条正常工作,这似乎很奇怪,但代码对我有用。

于 2015-04-15T18:33:26.410 回答
1

如果您想最终控制外观(即指示器的颜色),我已经调整了我在另一篇 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>

全面实施:

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

预览:

在此处输入图像描述

于 2016-04-08T04:50:09.043 回答
0

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

为达到这个:

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

    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    
  3. 添加ProgressBarWindowsFormsHost控制。例如

    <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();
    
于 2017-05-24T15:09:11.437 回答