2013-06-26 2 views
0

Я получил следующий ProgressBar стиль:IsIndeterminate ProgressBar Шаблон

<Style x:Key="{x:Type ProgressBar}" TargetType="{x:Type ProgressBar}"> 
    <Setter Property="Background" Value="{StaticResource ControlBackground}" /> 
    <Setter Property="BorderBrush" Value="{StaticResource ActiveControlBorderBrush}" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="MinHeight" Value="23" /> 
    <Setter Property="MinWidth" Value="75" /> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ProgressBar}"> 
       <Grid MinHeight="{TemplateBinding MinHeight}" 
         MinWidth="{TemplateBinding MinWidth}"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Determinate" /> 
          <VisualState x:Name="Indeterminate"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Duration="00:00:00" 
              Storyboard.TargetName="PART_Indicator" 
              Storyboard.TargetProperty="Background"> 
             <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
              <DiscreteObjectKeyFrame.Value> 
               <SolidColorBrush>Transparent</SolidColorBrush> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Border x:Name="PART_Track" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" /> 
        <Border x:Name="PART_Indicator" 
          Background="{TemplateBinding BorderBrush}" 
          HorizontalAlignment="Left" /> 
        <Grid x:Name="Animation" ClipToBounds="True"> 
         <Border x:Name="PART_GlowRect" 
           Width="100" 
           Background="{StaticResource ActiveControlBorderBrush}" 
           HorizontalAlignment="Left" 
           Margin="-100,0,0,0" /> 
        </Grid> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Если я поставил IsIndeterminate в True на ProgressBar; Я вижу Indicator, двигаясь в designer, но не на runtime. Кто-нибудь знает, почему он не работает на runtime?

EDIT:

с помощью Visual Studio Professional 2012/Приложение является WPF .NET 3.5

ответ

0

Я попробовал ваш пример, и это, кажется, работает. Убедитесь, что:

  1. StaticResources правильно нашел, я использовал черный вместо ActiveControlBorderBrush и зеленый вместо ControlBackground.

  2. Проверьте возможные проблемы с потоками (это может быть frezee или smth), если вы показываете его из кода.

+0

Пустой 'window' с только' progressbar' и этот стиль в 'resourcedictionary'. Окно не замерзает. Странный; он работает в дизайнере. – majk86

+0

Ну, глупый вопрос: есть ли у свойства IsIntermediate значение true? :) Это работает без стиля? –

+0

Да, из-за этого он установлен. Как я сказал; он работает в 'designer', но не на' runtime'. Пробовал перемещение стиля из 'resourcedictionary'. Попробовал заменить 'VSM' на' trigger'. По умолчанию 'progressbar' без' style' работает. – majk86