2010-01-12 6 views
2

Je crée un modèle XAML pour le fichier WPF ProgressBar. Le code XAML suivant fonctionne bien si IsIndeterminate est réglé sur False:Problème avec IsIndeterminate lors de la tentative de création d'un modèle XAML ProgressBar

<ControlTemplate x:Key="DefaultProgressBarTemplate" TargetType="{x:Type ProgressBar}"> 
    <ControlTemplate.Resources> 
     <SolidColorBrush x:Key="SolidBorderBrush" Color="#767676" /> 
     <LinearGradientBrush x:Key="IndicatorBrush" StartPoint="0,0" EndPoint="1,0"> 
      <LinearGradientBrush.GradientStops> 
       <GradientStop Color="#BCCF64" Offset="0.5" /> 
       <GradientStop Color="#E1FF77" Offset="0.0" /> 
      </LinearGradientBrush.GradientStops> 
     </LinearGradientBrush> 
    </ControlTemplate.Resources> 
    <Grid MinHeight="14"> 
     <Border Name="PART_Track" CornerRadius="9" Background="Transparent" BorderBrush="{StaticResource SolidBorderBrush}" BorderThickness="1" SnapsToDevicePixels="True" /> 
     <Border Name="PART_Indicator" CornerRadius="9" Background="{StaticResource IndicatorBrush}" BorderBrush="{StaticResource SolidBorderBrush}" BorderThickness="1" HorizontalAlignment="Left" SnapsToDevicePixels="True" /> 
    </Grid> 
</ControlTemplate> 

<Style x:Key="{x:Type ProgressBar}" TargetType="{x:Type ProgressBar}"> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="Template" Value="{StaticResource DefaultProgressBarTemplate}" /> 
</Style> 

La frontière indicateur remplit la ProgressBar du minimum au maximum. Mais si je mets IsIndeterminate à True la bordure de l'indicateur remplit la totalité de ProgressBar (comme si elle était réglée sur max) et rien n'est animé du tout. Rien que j'ai essayé n'a changé ce comportement du ProgressBar. Que dois-je faire pour avoir une animation IsIndeterminate similaire à celle du WPF standard ProgressBar?

Merci à l'avance

Banzai

+0

Je suis un peu confus, que voulez-vous exactement que votre bordure d'indicateur fasse quand IsIndeterminate est vrai? –

+0

L'animation doit s'exécuter de gauche à droite et inversement, comme c'est souvent le cas dans Windows ProgressBars. – banzai

Répondre

2

ProgressBar est conçu pour montrer l'indicateur Totalité IsIndeterminate="true". Les styles ProgressBar de WPF remplacent en fait la couleur de l'indicateur par une brosse animée chaque fois que IsIndeterminate="true" provoque l'effet que vous observez. Tu pourrais faire la même chose. Utilisez simplement un déclencheur de propriété sur IsIndeterminate="true" et définissez le pinceau sur un pinceau dont vous animez les couleurs. Une autre option serait de créer une animation séparée déclenchée par IsIndeterminate="true" si vous vouliez un effet différent.

Vous pouvez regarder les styles intégrés en utilisant l'outil NET Reflector avec son add-in BamlViewer. Les fichiers sources d'origine sont également copiés sur votre disque dur lorsque Expression Blend est installé, même la version d'évaluation, l'installation d'Expression Blend est donc une autre façon de voir le XAML pour les styles intégrés. Il suffit de regarder dans le répertoire C:\Program Files\Microsoft Expression\Blend 2\SystemThemes.

+0

Merci Ray - fonctionne comme un charme! – banzai

+0

De rien! Je suis content que ça a marché pour toi. Saviez-vous que vous pouvez marquer une réponse comme correcte, ce qui indique aux autres qu'il est correct, et donne également au répondant 15 points de réputation? –

+0

Non, je ne l'ai pas fait - mais vous avez obtenu vos points de réputation bien mérités ;-) – banzai

Questions connexes