Как показать значение, которое не связано с CategoryPath или ValuePath внутри подсказки TeleCar RadCartesianChart? - PullRequest
0 голосов
/ 01 ноября 2019

Я работаю с Telerik RadCartesianChart. И я должен показать всплывающую подсказку, которая передает информацию о серии внутри диаграммы (такую ​​как дата, значение, заголовок серии). Мне удалось показать дату и значение, которые уже были связаны в CategoryPath и ValuePath диаграммы соответственно. Но я понятия не имею, как показать заголовок ряда, который принадлежит одному и тому же источнику данных, но не связан ни с CategoryPath, ни с ValuePath. Ниже то, что я сделал до сих пор.

<telerik:RadCartesianChart x:Name="chart" Margin="0,10,0,36" Width="auto" Grid.RowSpan="2">
    <telerik:RadCartesianChart.Behaviors>
        <telerik:ChartTooltipBehavior HorizontalOffset="-11" VerticalOffset="-50" />
    </telerik:RadCartesianChart.Behaviors>
    <telerik:RadCartesianChart.TooltipTemplate>
        <DataTemplate>
            <Grid>
                <Border Background="White" BorderBrush="Black" BorderThickness="1" Padding="5" CornerRadius="3">
                    <StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Category}" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Value, StringFormat=\{0:N2\}}" />
                        </StackPanel>
                    </StackPanel>
                </Border>
            </Grid>
        </DataTemplate>
    </telerik:RadCartesianChart.TooltipTemplate>
    <telerik:RadCartesianChart.HorizontalAxis>
        <telerik:DateTimeCategoricalAxis
            x:Name="datetimeAxis"                                            
        LabelFitMode="MultiLine"
        LabelFormat="{Binding Tab.CurrentPoC.LabelFormat}"
        LabelInterval="1"
        LabelOffset="0"
        LabelRotationAngle="270"
        LabelStyle="{DynamicResource LabelStyle}"
        LastLabelVisibility="Visible"
        LineDashArray="1 1"
        LineStroke="{DynamicResource CouleurTexte}"
        LineThickness="1"
        MajorTickInterval="1"
        MajorTickLength="1"
        PlotMode="OnTicks"
        SmartLabelsMode="SmartStep"
        TickThickness="5"
        ZIndex="0" Height="5" />
    </telerik:RadCartesianChart.HorizontalAxis>
    <telerik:RadCartesianChart.VerticalAxis>
        <telerik:LinearAxis Foreground="White" LastLabelVisibility="Visible" HorizontalLocation="Right"/>
    </telerik:RadCartesianChart.VerticalAxis>
    <telerik:RadCartesianChart.Grid>
        <telerik:CartesianChartGrid MajorLinesVisibility="Y" />
    </telerik:RadCartesianChart.Grid>
    <telerik:RadCartesianChart.Resources>
        <Style x:Key="AxisLineStyle" TargetType="{x:Type telerik:LinearAxis}" >
            <Setter Property="Foreground" Value="{Binding ColorName, Mode=TwoWay, Converter={StaticResource NVarToBrushConverter}}"/>
            <Setter Property="Background" Value="{Binding ColorName, Mode=TwoWay, Converter={StaticResource NVarToBrushConverter}}"/>
        </Style>
        <DataTemplate x:Key="ellipseTemplate">
            <Ellipse Height="10" Width="10" Fill="{Binding Converter={StaticResource PaletteConverter}}"/>
        </DataTemplate>
        <DataTemplate x:Key="rectangleTemplate">
            <Rectangle Height="10" Width="10" Fill="{Binding Converter={StaticResource PaletteConverter}}" />
        </DataTemplate>
        <DataTemplate x:Key="triangleTemplate">
            <Polygon Points="10,5 5,10 15,10 10,3" Stroke="GreenYellow" StrokeThickness="2" Fill="{Binding Converter={StaticResource PaletteConverter}}"/>
        </DataTemplate>
        <!--<DataTemplate x:Key="+Template">
                <Rectangle Height="10" Width="10" Fill="{Binding Converter={StaticResource PaletteConverter}}" />
            </DataTemplate>
            <DataTemplate x:Key="xTemplate">
                <Rectangle Height="10" Width="10" Fill="{Binding Converter={StaticResource PaletteConverter}}" />
            </DataTemplate>-->
        <Style TargetType="telerik:LineSeries" BasedOn="{StaticResource LineSeriesStyle}">
            <Setter Property="LegendSettings" Value="{Binding Converter={StaticResource ChartViewLegendSettingsValueConverter}}"/>
            <Setter Property="ShowLabels" Value="False"/>
            <Setter Property="Stroke" Value="{Binding ColorName, Mode=TwoWay, Converter={StaticResource NVarToBrushConverter}}"/>
            <Setter Property="VerticalAxis">
                <Setter.Value>
                    <telerik:LinearAxis ElementBrush="{Binding Tab.CurrentPoC.LineSeriesColor}" HorizontalLocation="Left"/>
                </Setter.Value>
            </Setter>
            <Setter Property="PointTemplateSelector" Value="{StaticResource templateSelector}"/>
        </Style>
        <Style TargetType="telerik:BarSeries"  BasedOn="{StaticResource BarSeriesStyle}">
            <Setter Property="CombineMode" Value="Stack"/>
            <Setter Property="LegendSettings" Value="{Binding Converter={StaticResource ChartViewLegendSettingsValueConverter}}"/>
            <Setter Property="ShowLabels" Value="False"/>
            <Setter Property="VerticalAxis">
                <Setter.Value>
                    <telerik:LinearAxis ElementBrush="Gray" HorizontalLocation="Right"/>
                </Setter.Value>
            </Setter>
            <Setter Property="PointTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Rectangle Fill="{Binding Converter={StaticResource PaletteConverter}}" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="telerik:PointSeries" BasedOn="{StaticResource PointSeriesStyle}">
            <Setter Property="LegendSettings" Value="{Binding Converter={StaticResource ChartViewLegendSettingsValueConverter}}"/>
            <Setter Property="ShowLabels" Value="False"/>
            <Setter Property="Width" Value="15"/>
            <Setter Property="Height" Value="15"/>
            <Setter Property="VerticalAxis">
                <Setter.Value>
                    <telerik:LinearAxis ElementBrush="{Binding Tab.CurrentPoC.PointSeriesColor}" HorizontalLocation="Left" />
                    <!--Style="{DynamicResource AxisLineStyle}"-->
                </Setter.Value>
            </Setter>
            <Setter Property="PointTemplateSelector" Value="{StaticResource templateSelector}"/>
        </Style>
    </telerik:RadCartesianChart.Resources>
    <telerik:RadCartesianChart.SeriesProvider>
        <telerik:ChartSeriesProvider Source="{Binding Tab.CurrentPoC.GraphsToDisplay, Mode=TwoWay}">
            <telerik:ChartSeriesProvider.SeriesDescriptors>
                <telerik:CategoricalSeriesDescriptor x:Name="CatSeries" CategoryPath="TimeStampX" ValuePath="ValueY" ItemsSourcePath="Data" TypePath="SerieType"/>
            </telerik:ChartSeriesProvider.SeriesDescriptors>
        </telerik:ChartSeriesProvider>
    </telerik:RadCartesianChart.SeriesProvider>
</telerik:RadCartesianChart>

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Чтобы удовлетворить ваши требования, вы можете использовать свойство Presenter объекта DataPoint.

Объект DataPoint - это контекст данных, передаваемый в TooltipTemplate.

Presenter - это свойство DataPoint, которое содержит ссылку на объект серии, в котором находится конкретная точка данных.

    <telerik:RadCartesianChart.TooltipTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Presenter.DataContext.MySeriesNameProperty}" />
        </DataTemplate>
    </telerik:RadCartesianChart.TooltipTemplate>

Вы можете прочитать немного больше о DataPointкласс в документации RadChartView .

0 голосов
/ 01 ноября 2019

Я заработал, добавив новое свойство с именем LegendName к объекту источника данных. И изменил путь привязки следующим образом <TextBlock Text="{Binding Path=DataItem.LegendName}"/>. Не уверен, что это правильный путь, но он работает как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...