2011-03-28 62 views
2

我具有被結合到以下類型的集合的簡單Silverlight工具包圖表:Silverlight工具包圖表:分配超鏈接到軸

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

我能得到一個圖表,顯示名稱(X軸)和值(Y軸)正確,但我希望X軸上的標籤是HyperlinkBut​​tons到Url屬性。 X軸標籤應該是這樣的:

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

我發現這讓我設置爲AxisLabelStyle的X軸,使標籤現在HyperlinkBut​​tons一個例子。問題是我沒有能夠分配/綁定Url屬性作爲NavigateUri。有任何想法嗎?

+0

SO上的標籤是不可理解的,即使我不知道'charting'和'chart'之間的區別。無論如何,這個問題得到解答。 – vorrtex 2011-03-28 22:17:47

回答

3

起初我會發布完整的代碼,然後解釋。

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

的訣竅是在這一行:

IndependentValueBinding="{Binding}" 

使用這個綁定你傳遞一個整體對象,以獨立的軸,而不僅僅是一個屬性。 之後,你可以在標籤控件模板獲取綁定對象的屬性:

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

Binding關鍵字來代替TemplateBinding看起來很奇怪,但它是允許的,它的工作原理。 還有一個備註:Url屬性必須包含http前綴。它不適用於www

+0

就是這樣。您的代碼幾乎與我的完全一樣(除了IndependentValueBinding =「{Binding}」之外,我非常抱歉未將其包含在原始消息中並讓您輸入整個內容)。謝謝您的幫助! – Luis 2011-03-29 01:12:04