RadChart - Подсказка для самой оси X - Telerik

Я работаю над приложением WPF и использую элемент управления RadChart. Я знаком с функциями ItemToolTipFormat и DataPointMember="Tooltip", но мне интересно, возможно ли следующее:

Я прикрепил изображение для демонстрации:

Возможно ли, что при наведении курсора мыши на категории оси x я получу всплывающую подсказку: Например: на прикрепленном изображении при наведении курсора на слово "май" (или сентябрь, ноябрь и т. Д.) С помощью мыши курсор, я получу всплывающую подсказку.

Что происходит с вышеупомянутыми функциями, я получаю всплывающую подсказку на самой диаграмме, но, как уже упоминалось, я хочу всплывающую подсказку на самой категории по оси X (когда я наведите курсор на слова месяцев, как показано на рисунке).

Заранее спасибо за вашу помощь!

1 ответ

Решение

Это хороший вопрос. Насколько я могу судить, вы не можете установить всплывающую подсказку для этих меток без использования спорных реализаций. У меня есть решение, но оно довольно хакерское и поддерживает только данные с фиксированной осью. Он не поддерживает привязку (я не нашел возможности передать содержимое всплывающей подсказки через ItemMapping элементы).

Решение состоит из 3 частей; ResourceDictionary, Converter и RadChart контроль.

ResourceDictionary (Названный "ToolTipResources.xaml", расположенный в папке Resource той же библиотеки DLL) содержит содержимое подсказок:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel
        x:Key="Jan">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Jan"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In January" />
    </StackPanel>
    <StackPanel
        x:Key="Feb">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Feb"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In February" />
    </StackPanel>
    <StackPanel
        x:Key="Mar">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Mar"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In March" />
    </StackPanel>
    <StackPanel
        x:Key="Apr">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Apr"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In April" />
    </StackPanel>
    <StackPanel
        x:Key="May">
        <TextBlock
            HorizontalAlignment="Left"
            Text="May"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In May" />
    </StackPanel>
    <StackPanel
        x:Key="Jun">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Jun"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In June" />
    </StackPanel>
    <StackPanel
        x:Key="Jul">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Jul"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In July" />
    </StackPanel>
    <StackPanel
        x:Key="Aug">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Aug"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In August" />
    </StackPanel>
    <StackPanel
        x:Key="Sep">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Sep"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In September" />
    </StackPanel>
    <StackPanel
        x:Key="Oct">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Oct"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In October" />
    </StackPanel>
    <StackPanel
        x:Key="Nov">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Nov"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In November" />
    </StackPanel>
    <StackPanel
        x:Key="Dec">
        <TextBlock
            HorizontalAlignment="Left"
            Text="Dec"
            FontWeight="Bold" />
        <TextBlock
            HorizontalAlignment="Left"
            Text="In December" />
    </StackPanel>
</ResourceDictionary>

Converter связывает названия меток с соответствующим содержанием всплывающей подсказки:

/// <summary>
/// Converts chart label names into associated ToolTip content.
/// </summary>
[ValueConversion(typeof(string), typeof(object))]
public class MonthToToolTipConverter : IValueConverter
{
    private static string _assemblyName;

    static MonthToToolTipConverter()
    {
        _assemblyName = Assembly.GetExecutingAssembly().FullName;
    }

    /// <summary>
    /// Converts a value.
    /// </summary>
    /// <param name="value">The value produced by the binding source.</param>
    /// <param name="targetType">The type of the binding target property.</param>
    /// <param name="parameter">The converter parameter to use.</param>
    /// <param name="culture">The culture to use in the converter.</param>
    /// <returns>A converted value. If the method returns null, the valid null value is used.</returns>
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        object result = null;
        var labelName = value as string;
        if (labelName != null)
        {
            var toolTipResourcesDictionary = new ResourceDictionary();

            toolTipResourcesDictionary.Source = new Uri(String.Format("pack://application:,,,/{0};component/Resources/ToolTipResources.xaml", _assemblyName), UriKind.Absolute);
            result = toolTipResourcesDictionary[labelName];
        }
        return result;
    }

    /// <summary>
    /// Converts a value.
    /// </summary>
    /// <param name="value">The value that is produced by the binding target.</param>
    /// <param name="targetType">The type to convert to.</param>
    /// <param name="parameter">The converter parameter to use.</param>
    /// <param name="culture">The culture to use in the converter.</param>
    /// <returns>A converted value. If the method returns null, the valid null value is used.</returns>
    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Дополнение к RadChart управления:

<telerikCharting:ChartArea.AxisX>
    <telerikCharting:AxisX>
        <telerikCharting:AxisX.AxisStyles>
            <telerikCharting:AxisStyles>
                <telerikCharting:AxisStyles.ItemLabelStyle>
                    <Style
                        TargetType="{x:Type TextBlock}">
                        <Setter
                            Property="ToolTip"
                            Value="{Binding Text, RelativeSource={RelativeSource Self}, Converter={StaticResource MonthToToolTipConverter}}" />
                    </Style>
                </telerikCharting:AxisStyles.ItemLabelStyle>
            </telerikCharting:AxisStyles>
        </telerikCharting:AxisX.AxisStyles>
    </telerikCharting:AxisX>
</telerikCharting:ChartArea.AxisX>

Полное представление RadChart (вашего примера из документации Telerik):

<Window
    x:Class="YourChartProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
    xmlns:telerikCharting="clr-namespace:Telerik.Windows.Controls.Charting;assembly=Telerik.Windows.Controls.Charting"
    xmlns:local="clr-namespace:YourChartProject"
    Title="MainWindow"
    Height="350"
    Width="525">
    <Window.Resources>
        <local:MonthToToolTipConverter
            x:Key="MonthToToolTipConverter" />
    </Window.Resources>
    <Grid>
        <telerik:RadChart
            VerticalAlignment="Top">
            <telerik:RadChart.DefaultView>
                <telerikCharting:ChartDefaultView>
                    <telerikCharting:ChartDefaultView.ChartTitle>
                        <telerikCharting:ChartTitle
                            Content="Year 2009"
                            HorizontalAlignment="Center" />
                    </telerikCharting:ChartDefaultView.ChartTitle>
                    <telerikCharting:ChartDefaultView.ChartLegend>
                        <telerikCharting:ChartLegend
                            x:Name="chartLegend"
                            UseAutoGeneratedItems="True" />
                    </telerikCharting:ChartDefaultView.ChartLegend>
                    <telerikCharting:ChartDefaultView.ChartArea>
                        <telerikCharting:ChartArea
                            LegendName="chartLegend">
                            <telerikCharting:ChartArea.AxisX>
                                <telerikCharting:AxisX
                                    LayoutMode="Between"
                                    Title="Month">
                                    <telerikCharting:AxisX.AxisStyles>
                                        <telerikCharting:AxisStyles>
                                            <telerikCharting:AxisStyles.ItemLabelStyle>
                                                <Style
                                                    TargetType="{x:Type TextBlock}">
                                                    <Setter
                                                        Property="ToolTip"
                                                        Value="{Binding Text, RelativeSource={RelativeSource Self}, Converter={StaticResource MonthToToolTipConverter}}" />
                                                </Style>
                                            </telerikCharting:AxisStyles.ItemLabelStyle>
                                        </telerikCharting:AxisStyles>
                                    </telerikCharting:AxisX.AxisStyles>
                                </telerikCharting:AxisX>
                            </telerikCharting:ChartArea.AxisX>
                            <telerikCharting:ChartArea.DataSeries>
                                <!-- Line Chart -->
                                <telerikCharting:DataSeries
                                    LegendLabel="Turnover">
                                    <telerikCharting:DataSeries.Definition>
                                        <telerikCharting:LineSeriesDefinition></telerikCharting:LineSeriesDefinition>
                                    </telerikCharting:DataSeries.Definition>
                                    <telerikCharting:DataPoint
                                        YValue="154"
                                        XCategory="Jan" />
                                    <telerikCharting:DataPoint
                                        YValue="138"
                                        XCategory="Feb" />
                                    <telerikCharting:DataPoint
                                        YValue="143"
                                        XCategory="Mar" />
                                    <telerikCharting:DataPoint
                                        YValue="120"
                                        XCategory="Apr" />
                                    <telerikCharting:DataPoint
                                        YValue="135"
                                        XCategory="May" />
                                    <telerikCharting:DataPoint
                                        YValue="125"
                                        XCategory="Jun" />
                                    <telerikCharting:DataPoint
                                        YValue="179"
                                        XCategory="Jul" />
                                    <telerikCharting:DataPoint
                                        YValue="170"
                                        XCategory="Aug" />
                                    <telerikCharting:DataPoint
                                        YValue="198"
                                        XCategory="Sep" />
                                    <telerikCharting:DataPoint
                                        YValue="187"
                                        XCategory="Oct" />
                                    <telerikCharting:DataPoint
                                        YValue="193"
                                        XCategory="Nov" />
                                    <telerikCharting:DataPoint
                                        YValue="176"
                                        XCategory="Dec" />
                                </telerikCharting:DataSeries>
                                <!-- Bar Chart -->
                                <telerikCharting:DataSeries
                                    LegendLabel="Expenses">
                                    <telerikCharting:DataSeries.Definition>
                                        <telerikCharting:BarSeriesDefinition></telerikCharting:BarSeriesDefinition>
                                    </telerikCharting:DataSeries.Definition>
                                    <telerikCharting:DataPoint
                                        YValue="45"
                                        XCategory="Jan" />
                                    <telerikCharting:DataPoint
                                        YValue="48"
                                        XCategory="Feb" />
                                    <telerikCharting:DataPoint
                                        YValue="53"
                                        XCategory="Mar" />
                                    <telerikCharting:DataPoint
                                        YValue="41"
                                        XCategory="Apr" />
                                    <telerikCharting:DataPoint
                                        YValue="32"
                                        XCategory="May" />
                                    <telerikCharting:DataPoint
                                        YValue="28"
                                        XCategory="Jun" />
                                    <telerikCharting:DataPoint
                                        YValue="63"
                                        XCategory="Jul" />
                                    <telerikCharting:DataPoint
                                        YValue="74"
                                        XCategory="Aug" />
                                    <telerikCharting:DataPoint
                                        YValue="77"
                                        XCategory="Sep" />
                                    <telerikCharting:DataPoint
                                        YValue="85"
                                        XCategory="Oct" />
                                    <telerikCharting:DataPoint
                                        YValue="89"
                                        XCategory="Nov" />
                                    <telerikCharting:DataPoint
                                        YValue="80"
                                        XCategory="Dec" />
                                </telerikCharting:DataSeries>
                            </telerikCharting:ChartArea.DataSeries>
                        </telerikCharting:ChartArea>
                    </telerikCharting:ChartDefaultView.ChartArea>
                </telerikCharting:ChartDefaultView>
            </telerik:RadChart.DefaultView>
        </telerik:RadChart>
    </Grid>
</Window>
Другие вопросы по тегам