2010-05-31 3 views
1

Je jouais avec la personnalisation de la barre de progression dans l'application Silverlight. Ce que je veux atteindre est d'avoir l'étiquette de barre de progression pour montrer son état actuel dans le format suivant: "Value/Maximum". Ainsi, l'utilisateur verra quelle est la valeur actuelle, et quelle est la valeur maximale possible. Voici un style pour la barre de progression que j'utilise:Texte d'étiquette de barre de progression personnalisée via la liaison

<Style x:Key="ProgressBarStyle" TargetType="ProgressBar"> 
     <Setter Property="Width" Value="97.21" /> 
     <Setter Property="Height" Value="19" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ProgressBar"> 
        <Canvas x:Name="LevelField" Width="99" Height="21"> 
         ... 
        <TextBlock ... DataContext="{TemplateBinding Value}" Text="{Binding Converter={StaticResource DecNumberToStringConverter}}"/> 
        </Canvas> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

La façon dont je veux mettre en œuvre, est d'avoir un convertisseur de valeur, qui permet de convertir la valeur actuelle et maximale possible dans la chaîne appropriée. Cela fonctionne correctement, s'il est écrit comme ci-dessus. Cependant, j'ai aussi besoin de fournir ConverterParameter for Convertor, mais je ne sais pas comment le faire. Quand j'écris comme ceci:, ConvertParameter = {Binding Maximum}, il montre une erreur au démarrage, cet attribut Text n'est pas trouvé dans TextBlock. J'ai également essayé de définir DataContext en tant que {RelativeSource Self}, mais il n'affiche pas d'erreur que l'attribut DataContext est introuvable.

Comment faire pour que l'étiquette de barre de progression décrite correctement?

Répondre

0

D'accord, il semble que j'ai trouvé l'un des moyens. Ce n'est pas le meilleur, mais fonctionne si vous n'avez pas besoin d'une solution universelle. Donc, tout ce que je fais est de créer plus de 1 styles de barre de progression, puis dans chaque type de barre de progression, spécifiez son type comme un paramètre de chaîne à convertir. Puis dans le convertisseur (celui-ci reste le même pour toutes les barres de progression) j'examine le paramètre, et spécifie moi-même quel est le nombre maximum pour cette barre d'outils, en utilisant une constante, ou une valeur directe. Cependant, j'aimerais toujours entendre une solution universelle.

0

Essayez de lier la TextBox au parent, puis votre convertisseur de valeur peut accéder à la fois à la valeur et au maximum. {Binding RelativeSource={RelativeSource TemplatedParent}}.

Ensuite, votre convertisseur de valeur peut diffuser l'objet en tant que ProgressBar et utiliser directement les valeurs.