我有一个简单的Silverlight Toolkit Chart,它绑定到以下类型的集合:
public class ChartItemClass
{
public string Name { get; set; }
public double Value { get; set; }
public string Url { get; set; }
}
我可以使用Chart来正确显示Name(X轴)和Value(Y轴),但我希望X轴上的标签是Url属性的HyperlinkButtons。 X轴标签应如下所示:
<HyperlinkButton Content="*Name Property Here*" NavigateUri="*Url Property Here*" TargetName="_blank"></HyperlinkButton>
我找到了一个允许我为X轴设置AxisLabelStyle的示例,因此标签现在是HyperlinkButtons。问题是我无法将Url属性分配/绑定为NavigateUri。有什么想法吗?
答案 0 :(得分: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}"
使用此绑定将整个对象传递给独立轴,而不仅仅是属性。 之后,您可以在label:
的控件模板中获取绑定对象的属性Content="{Binding Name}" NavigateUri="{Binding Url}"
Binding
关键字而不是TemplateBinding
看起来很奇怪,但它是允许的并且有效。
有一句话:Url
属性必须包含http
前缀。它不适用于www
。