На диаграммах livecharts необходимо отобразить LabelVisual, который менялся бы при изменении положения курсора
У меня есть несколько диаграмм. На каждой диаграмме есть LabelVisual, текст которого надо менять при изменении положения курсора по оси x. Текст нужно менять на всех диаграммах, а не только над той, над которой расположен курсор. На данный момент у меня получается сделать это только над той диаграммой, над которой расположен курсор.
MainWindow.axaml
<Window>
<Design.DataContext>
<vm:MainWindowViewModel2/>
</Design.DataContext>
<Window.DataContext>
<vm:MainWindowViewModel2 />
</Window.DataContext>
<ScrollViewer AllowAutoHide="True">
<ItemsControl x:Name="ItemsGraphs" PointerMoved="ItemsControl_PointerMoved" ItemsSource="{Binding ItemsGraphs}" >
<ItemsControl.DataTemplates>
<views:ItemsTemplateSelector>
<DataTemplate x:Key="{x:Type vm:ViewModelLineSmoothness}">
<views:LineSmoothness/>
</DataTemplate>
<DataTemplate x:Key="{x:Type vm:ViewModelDiscreteSignal}">
<views:DiscreteSignal/>
</DataTemplate>
</views:ItemsTemplateSelector>
</ItemsControl.DataTemplates>
</ItemsControl>
</ScrollViewer>
</Window>
LineSmoothness.axaml
<UserControl>
<lvca:CartesianChart Name="ChartLine"
Series="{Binding Series}"
Sections="{Binding Sections}"
YAxes="{Binding YAxes}"
XAxes="{Binding XAxes}"
Background="White"
Height="200"
Margin="5"
LegendPosition="Right"
LegendTextPaint="{Binding LegendTextPaint}"
LegendTextSize="12"
TooltipTextSize="10"
VisualElements="{Binding VisualElements}"
PointerPressedCommand="{Binding PointerDownCommand}"
PointerMoveCommand="{Binding PointerMoveCommand}"
TooltipPosition ="Auto"
ZoomMode="ZoomY">
<lvca:CartesianChart.DrawMarginFrame>
<lvc:DrawMarginFrame>
<lvc:DrawMarginFrame.Stroke>
<lvcp:SolidColorPaint Color="#808080" StrokeThickness="1" />
</lvc:DrawMarginFrame.Stroke>
</lvc:DrawMarginFrame>
</lvca:CartesianChart.DrawMarginFrame>
</lvca:CartesianChart>
</UserControl>
ViewModelLineSmoothness.cs
...
public LiveChartsCore.SkiaSharpView.VisualElements.LabelVisual labelMarker;
public ObservableCollection<ChartElement<SkiaSharpDrawingContext>> VisualElements => visuals;
public ViewModelLineSmoothness()
{
labelMarker = new LiveChartsCore.SkiaSharpView.VisualElements.LabelVisual
{
HorizontalAlignment = Align.Start,
TextSize = 15,
X = 100,
Y = 100,
Paint = new SolidColorPaint(SKColors.Red)
{
ZIndex = 11,
SKTypeface = SKTypeface.FromFamilyName("Courier New")
},
BackgroundColor = new LvcColor(55, 71, 79).WithOpacity(10),
Padding = new Padding(5),
LocationUnit = MeasureUnit.Pixels,
};
visuals.Add(labelMarker);
}
[RelayCommand]
public void PointerMoveCommand(PointerCommandArgs args)
{
labelMarker.Text = $"{args.PointerPosition.X:f2}";
labelMarker.X = args.PointerPosition.X;
labelMarker.Y = args.PointerPosition.Y;
labelMarker.Invalidate((Chart<SkiaSharpDrawingContext>)args.Chart.CoreChart);
}
...