WPF пользовательское вырезание индикатора выполнения - PullRequest
3 голосов
/ 09 декабря 2010

Я создал пользовательский индикатор выполнения следующим образом:

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

1 Ответ

8 голосов
/ 09 декабря 2010

Это был интересный вопрос.Я наконец получил это прибитым к тому, чтобы быть краем, который вызывал проблему.Индикатор выполнения устанавливает ширину PART_Indicator на основе ширины PART_Track независимо от установленного поля или отступов.Следующий стиль даст вам желаемое поведение.

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