Проблема с IsIndeterminate при попытке собрать XAML-шаблон ProgressBar - PullRequest
2 голосов
/ 12 января 2010

Я создаю шаблон XAML для WPF ProgressBar. Следующий код XAML работает нормально, если для IsIndeterminate установлено значение False:

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

Граница индикатора заполняет ProgressBar от мин до макс. Но если я установлю IsIndeterminate на True, граница индикатора заполнит весь ProgressBar (как будто он установлен на макс.) И ничего не будет анимировано. Ничто из того, что я пробовал, не изменило это поведение ProgressBar. Что мне нужно сделать, чтобы анимация IsIndeterminate была похожа на анимацию в стандартном WPF ProgressBar?

Заранее спасибо

банзай

1 Ответ

2 голосов
/ 13 января 2010

ProgressBar предназначен для показа всего индикатора при IsIndeterminate="true". Встроенные в WPF ProgressBar стили фактически заменяют цвет индикатора анимированной кистью всякий раз, когда IsIndeterminate="true" вызывает эффект, который вы наблюдаете. Вы могли бы сделать то же самое. Просто используйте триггер свойства на IsIndeterminate="true" и установите кисть на кисть, цвета которой вы анимируете. Другой вариант - создать отдельную анимацию, запускаемую IsIndeterminate="true", если вы хотите другой эффект.

Вы можете посмотреть на встроенные стили, используя инструмент NET Reflector вместе с его надстройкой BamlViewer. При установке Expression Blend исходные исходные файлы также копируются на ваш жесткий диск, даже в ознакомительную версию, поэтому установка Expression Blend - это еще один способ увидеть XAML для встроенных стилей. Просто посмотрите в каталог C:\Program Files\Microsoft Expression\Blend 2\SystemThemes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...