2010-12-09 12 views
3

ich eine benutzerdefinierte Statusleiste erstellt haben, wie folgt:WPF individuelle Fortschrittsbalken 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> 

Hier ist, wie es verwendet wird:

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

Es funktioniert ganz gut, aber wenn der Fortschritt ist voll Die rechte Seite des Füllbalkens ist abgeschnitten, wodurch das Rundungs-Styling entfernt wird, für das ich mich entschieden habe. Ich habe mit Padding, Rändern, maximaler Breite usw. gekontert, aber ich finde keinen Weg, das Clipping zu verhindern. Hier

ist ein Bild:

alt text

Antwort

8

Das war interessant zu beantworten. Ich habe es endlich zu dem Rand gemacht, der das Problem verursacht hat. Der Fortschrittsbalken legt die Breite von PART_Indicator basierend auf der Breite von PART_Track unabhängig von dem festgelegten Rand oder Abstand fest. Der folgende Stil wird Ihnen das gewünschte Verhalten geben.

<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. Vielen Dank! Es ist nicht gerade ein intuitiver Prozess, diese Steuerelemente anzupassen. Kennen Sie hilfreiche Tutorials oder Dokumentationen, um mit solchen Dingen zu helfen? – BabaBooey

+1

Für mich ist es immer Versuch und Irrtum (in Kaxaml für Geschwindigkeit). Sie können Blend verwenden, um die Stile zu kopieren und zu ändern, aber das Styling als Ganzes ist ein kraftvoller, brillanter, aber komplexer Prozess, so dass selbst das umständlich sein kann. –

+1

+1 Als eine Randnotiz ... würdest du eigentlich Padding = "3" auf dem neu hinzugefügten Border setzen wollen, um das Gefühl zu bekommen, dass er vorher ging. –