wpf windows-8 wpf-controls

Las barras de progreso de Windows 8 WPF no tienen animación de brillo



windows-8 wpf-controls (3)

Las barras de progreso en las aplicaciones de Windows Forms tienen la animación estándar "brillar", pero cuando trato de agregar una barra de progreso en WPF, no obtengo tal cosa de forma predeterminada. ¿Cómo recuperamos esto con WPF en Windows 8?

Formularios de Windows

WPF


Es una solución bastante bizarra, pero debe habilitar los estilos de Windows Forms en su aplicación para usar el "brillo". Así es como lo hice.

  1. Agregue una referencia en su proyecto a System.Windows.Forms
  2. Vaya a la página de configuración del proyecto y haga clic en View Application Events
  3. Agregue un controlador a su Application.Startup usando el siguiente código (en VB.NET, C # similar) (también, si necesita incluir los argumentos, hágalo)

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

Parece raro que tengas que llamar a esto para que la barra de progreso de WPF funcione, pero el código funciona para mí.


Si desea el último control sobre el aspecto (es decir, el color del indicador), he ajustado un control que encontré en otra publicación SO, que ofrece una visualización casi idéntica.

Retocar:

<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>

Plena aplicación:

El estilo de barra de progreso en WPF está pasado de moda. Incrementos en Barras ¿Cómo implementar una barra de progreso con vista o efecto de brillo sombrío de Windows-7?

Avance:


La respuesta de Milliron X no me ayudó, así que tuve que usar Windows Forms ProgressBar lugar de reinventar la rueda con control personalizado.

Lograr esto:

  1. Agregue referencia a los ensamblados WindowsFormsIntegration y System.Windows.Forms .
  2. Agregar el siguiente espacio de nombre al elemento Window

    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

  3. Agregue ProgressBar al control de WindowsFormsHost . Por ejemplo

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

  4. Para que nuestro ProgressBar no parezca "antiguo", debe agregar la siguiente línea a su punto de entrada (por ejemplo, método Main o método Application.OnStartUp ):

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