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.
- Agregue una referencia en su proyecto a
System.Windows.Forms
- Vaya a la página de configuración del proyecto y haga clic en
View Application Events
- 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:
- Agregue referencia a los ensamblados
WindowsFormsIntegration
ySystem.Windows.Forms
. Agregar el siguiente espacio de nombre al elemento
Window
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
Agregue
ProgressBar
al control deWindowsFormsHost
. Por ejemplo<WindowsFormsHost Margin="0,10,0,0"> <wf:ProgressBar x:Name="DownloadProgressBar" Width="500" Height="50" /> </WindowsFormsHost>
Para que nuestro
ProgressBar
no parezca "antiguo", debe agregar la siguiente línea a su punto de entrada (por ejemplo, métodoMain
o métodoApplication.OnStartUp
):System.Windows.Forms.Application.EnableVisualStyles();