2009-11-05 8 views
0

Je suis en train de retemplate une barre de progression Silverlight3, pour montrer la « valeur » dans un TextBlock dans le ProgressBarIndicator, et le « maximum » dans un autre textblock dans le ProgressBarTrack.Silverlight 3 ProgressBar Modèle

Je pense que l'utilisation TemplateBinding sur la Valeur et maximum propriétés se faire, mais il ne fonctionne pas.

Pour votre information le modèle que j'ai à ce jour est:

 <Style x:Key="ProgressBarStyle1" TargetType="ProgressBar"> 
     <Setter Property="Foreground" Value="#FF027DB8"/> 
     <Setter Property="Background" Value="#FFD2D5D8"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="Maximum" Value="100"/> 
     <Setter Property="Value" Value="50"/> 
     <Setter Property="IsTabStop" Value="False"/> 
     <Setter Property="BorderBrush"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint=".5,1" StartPoint=".5,0"> 
        <GradientStop Color="#FFAEB7BF" Offset="0"/> 
        <GradientStop Color="#FF919EA7" Offset="0.35"/> 
        <GradientStop Color="#FF7A8A99" Offset="0.35"/> 
        <GradientStop Color="#FF647480" Offset="1"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ProgressBar"> 
        <Grid x:Name="Root"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Determinate"/> 
           <VisualState x:Name="Indeterminate"> 
            <Storyboard RepeatBehavior="Forever"> 
             <ObjectAnimationUsingKeyFrames Duration="00:00:00" Storyboard.TargetName="IndeterminateRoot" Storyboard.TargetProperty="(UIElement.Visibility)"> 
              <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Visible</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Duration="00:00:00" Storyboard.TargetName="DeterminateRoot" Storyboard.TargetProperty="(UIElement.Visibility)"> 
              <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Collapsed</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Border x:Name="ProgressBarTrack" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3" ToolTipService.ToolTip="{TemplateBinding Maximum}"> 
          <Border.Effect> 
           <DropShadowEffect Color="#FF626262" Opacity="0.8"/> 
          </Border.Effect> 
          <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" Text="{TemplateBinding Maximum}" TextWrapping="NoWrap" Foreground="White" Margin="0,0,2,0"/> 
         </Border> 
         <Grid x:Name="ProgressBarRootGrid"> 
          <Rectangle x:Name="ProgressBarRootGradient" RadiusX="1.5" RadiusY="1.5" Margin="{TemplateBinding BorderThickness}" Canvas.ZIndex="1" Stroke="Black"> 
           <Rectangle.Fill> 
            <LinearGradientBrush EndPoint=".7,1" StartPoint=".7,0"> 
             <GradientStop Color="#B2FFFFFF" Offset="0"/> 
             <GradientStop Color="#0CFFFFFF" Offset="0.198"/> 
             <GradientStop Color="#91FFFFFF" Offset="0.336"/> 
             <GradientStop Color="#0CFFFFFF" Offset="1"/> 
            </LinearGradientBrush> 
           </Rectangle.Fill> 
          </Rectangle> 
          <Grid x:Name="IndeterminateRoot" Visibility="Collapsed"> 
           <Rectangle x:Name="IndeterminateSolidFill" Fill="{TemplateBinding Foreground}" Stroke="#FF448DCA" StrokeThickness="0" RadiusX="2" RadiusY="2" Margin="{TemplateBinding BorderThickness}" Opacity="1" RenderTransformOrigin="0.5,0.5"/> 
          </Grid> 
          <Grid x:Name="DeterminateRoot" Margin="1"> 
           <Grid x:Name="ProgressBarIndicator" Margin="0" HorizontalAlignment="Left" ToolTipService.ToolTip="{TemplateBinding Value}"> 
            <Rectangle x:Name="ProgressBarIndicator1" Fill="{TemplateBinding Foreground}" StrokeThickness="0" RadiusX="1.5" RadiusY="1.5" Margin="0"/> 
            <TextBlock HorizontalAlignment="Right" Margin="0,0,2,0" VerticalAlignment="Center" TextWrapping="Wrap" Foreground="White" Text="{TemplateBinding Value}"/> 
           </Grid> 
          </Grid> 
         </Grid> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Et je faisant référence à cette via UserControl.Resources locales comme suit:

 <ProgressBar x:Name="availableHoursProgress" 
       Margin="2" 
       Foreground="#FF42B802" 
       Background="Red" 
       Style="{StaticResource ProgressBarStyle1}" 
       BorderThickness="0" 
       BorderBrush="{x:Null}" 
       Value="2" 
       Maximum="7.5" 
       HorizontalAlignment="Stretch" 
       /> 

Merci à l'avance pour toute aide que vous pouvez offrir,

Mark

MISE A JOUR ==== ====

OK, cette question est parce que l'objet que je suis trop contraignantes est de type Double et Textblock.Text attend une chaîne .

donc mon nouveau problème est de savoir comment appliquer un convertisseur à la TemplateBinding, ou bien exposer une propriété de chaîne sur ProgressBar:

public string ValueString{ get { return Value.ToString(); } } 

Répondre

0

Cette question a déjà été répondu here.

Bon travail James !!