2010-12-09 138 views
3

我创建了一个自定义的进度条如下:WPF自定义进度条裁剪

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

这里是如何使用它:

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

它工作的很好,但是当进度满,填充条的右侧会被裁剪掉,这将消除我要去的舍入样式。我已经填充了填充,边距,最大宽度等,但是我找不到防止裁剪的方法。

这里是一个形象:

alt text

回答

8

这是一个有趣的回答。我终于明白是导致问题的边际。进度条根据PART_Track的宽度设置PART_Indicator的宽度,而不管设置的边距或填充。以下风格将会为您带来理想的行为。

<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

宾果。谢谢!定制这些控件并不是一个直观的过程。你知道任何有用的教程或文档来帮助解决这些问题吗? – BabaBooey 2010-12-09 16:32:37