2011-03-28 2 views
2

J'ai un graphique simple de Silverlight Toolkit qui est lié à une collection de type:Silverlight Toolkit Graphique: Assigner un lien hypertexte à l'axe

public class ChartItemClass 
{ 
    public string Name { get; set; } 
    public double Value { get; set; } 
    public string Url { get; set; } 
} 

je peux obtenir un graphique pour afficher le nom (axe X) et Value (Y-axis) correctement, mais je voudrais que les étiquettes sur l'axe X soient HyperlinkButtons à la propriété Url. L'étiquette de l'axe X doit être quelque chose comme ce qui suit:

<HyperlinkButton Content="*Name Property Here*" NavigateUri="*Url Property Here*" TargetName="_blank"></HyperlinkButton> 

Je trouve un exemple qui m'a permis de mettre le AxisLabelStyle pour l'axe X de sorte que les étiquettes sont maintenant HyperlinkButtons. Le problème est que je n'ai pas été en mesure d'affecter/lier la propriété Url en tant que NavigateUri. Des idées?

+0

Les balises sur SO ne sont pas compréhensibles, même si je ne connais pas la différence entre 'charting' et 'chart'. De toute façon la question est répondue. – vorrtex

Répondre

3

D'abord je posterai le code complet et après cela l'explication.

<UserControl.Resources> 
    <Style x:Key="hyperlinkStyle" TargetType="charting:AxisLabel"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="charting:AxisLabel"> 
        <HyperlinkButton Content="{Binding Name}" NavigateUri="{Binding Url}" TargetName="_blank"/> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

<charting:Chart> 
    <charting:Chart.Series> 
     <charting:ColumnSeries ItemsSource="{Binding Items}" DependentValueBinding="{Binding Value}" IndependentValueBinding="{Binding}"> 
      <charting:ColumnSeries.IndependentAxis> 
       <charting:CategoryAxis Orientation="X" AxisLabelStyle="{StaticResource hyperlinkStyle}" /> 
      </charting:ColumnSeries.IndependentAxis> 
     </charting:ColumnSeries> 
    </charting:Chart.Series> 
</charting:Chart> 

L'astuce est dans cette ligne:

IndependentValueBinding="{Binding}" 

En utilisant cette liaison que vous passez un objet entier à l'axe indépendant, non seulement une propriété. Et après que vous pouvez obtenir des propriétés d'un objet lié dans le modèle de contrôle de l'étiquette:

Content="{Binding Name}" NavigateUri="{Binding Url}" 

Le mot-clé Binding au lieu de l'TemplateBinding semble étrange, mais il est permis et il fonctionne. Et il y a une remarque: la propriété Url doit contenir le préfixe http. Cela ne fonctionne pas avec www.

+0

C'était tout. Votre code est à peu près exactement ce que j'avais (je m'excuse de ne pas l'avoir inclus dans le message d'origine et de vous faire taper le tout) sauf pour le IndependentValueBinding = "{Binding}". Merci pour l'aide! – Luis

Questions connexes