2010-12-09 57 views
3

J'ai créé une barre de progression personnalisée comme suit:WPF barre de progression personnalisée clipping

<!-- Custom progress bar --> 
    <Style 
     x:Key="CopyProgressBar" 
     TargetType="ProgressBar"> 
     <Setter 
      Property="Template"> 
      <Setter.Value> 
       <ControlTemplate 
        TargetType="ProgressBar"> 
        <Grid> 
         <Border 
          x:Name="PART_Track" 
          CornerRadius="5" 
          BorderBrush="#BBC6C4" 
          BorderThickness="2" /> 
         <Rectangle 
          x:Name="PART_Indicator" 
          Fill="#A5B2B0" 
          RadiusX="5" 
          RadiusY="5" 
          Margin="3" 
          HorizontalAlignment="Left" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Voilà comment il est utilisé:

<ProgressBar 
      x:Name="copyProgress" 
      Height="13" 
      Width="279" 
      Canvas.Left="158" 
      Canvas.Top="103" 
      Minimum="0" 
      Maximum="100" 
      Style="{StaticResource CopyProgressBar}" /> 

Il fonctionne très bien, mais quand les progrès est plein , le côté droit de la barre de remplissage est coupé, ce qui supprime le style arrondi que je veux. J'ai bidouillé avec le remplissage, les marges, la largeur maximum, etc., mais je ne peux pas trouver un moyen d'empêcher l'écrêtage.

est ici une image:

alt text

Répondre

8

C'était intéressante pour répondre. J'ai finalement compris que c'était la marge qui causait le problème. La barre de progression définit la largeur de PART_Indicator en fonction de la largeur de PART_Track, quelle que soit la marge ou les paddings définis. Le style suivant vous obtiendra le comportement désiré.

<Style x:Key="CopyProgressBar" TargetType="ProgressBar"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ProgressBar">     
       <Border BorderBrush="#BBC6C4" BorderThickness="1" CornerRadius="5" Padding="1"> 
        <Grid x:Name="PART_Track" > 
         <Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left" Fill="#A5B2B0" RadiusX="5" RadiusY="5"/> 
        </Grid>     
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

Bingo. Merci! Ce n'est pas vraiment un processus intuitif pour personnaliser ces contrôles. Connaissez-vous des tutoriels utiles ou de la documentation pour aider avec de telles choses? – BabaBooey

+1

Pour moi, c'est toujours un essai et une erreur (dans Kaxaml pour la vitesse). vous pouvez utiliser Blend pour copier et modifier les styles, mais le style dans son ensemble est un processus puissant, brillant mais complexe, même si cela peut être gênant. –

+1

+1 Comme note de côté ... vous voudriez réellement placer Padding = "3" sur la frontière nouvellement ajoutée pour obtenir la sensation qu'il allait avant. –