Диаграмма набора инструментов Silverlight: назначение гиперссылки на ось - PullRequest
2 голосов
/ 28 марта 2011

У меня есть простая диаграмма Silverlight Toolkit, которая привязана к коллекции следующего типа:

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

Я могу получить диаграмму для правильного отображения имени (ось X) и значения (ось Y), но хотелось бы, чтобы метки на оси X были HyperlinkButtons для свойства Url. Метка оси X должна выглядеть примерно так:

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

Я нашел пример, который позволил мне установить AxisLabelStyle для оси X, чтобы метки теперь были HyperlinkButtons. Проблема в том, что я не смог назначить / связать свойство Url как NavigateUri. Есть идеи?

1 Ответ

3 голосов
/ 29 марта 2011

Сначала я выложу полный код, а затем объяснение.

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

...