WPF LiveChartsCore.SkiaSharpView.WPF -version 2.0.0-rc5.4

install-package LiveChartsCore.SkiaSharpView.WPF -version 2.0.0-rc5.4

 

 

//xaml
<Window x:Class="WpfApp30.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp30"
        mc:Ignorable="d"
        WindowState="Maximized"
        xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <lvc:CartesianChart
             Series="{Binding Series}"
             XAxes="{Binding XAxes}"
             YAxes="{Binding YAxes}"/>
    </Grid>
</Window>


//.cs
using LiveChartsCore;
using LiveChartsCore.Defaults;
using LiveChartsCore.SkiaSharpView;
using LiveChartsCore.SkiaSharpView.Painting;
using SkiaSharp;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp30
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ISeries[] Series { get; set; }
        public Axis[] XAxes { get; set; }
        public Axis[] YAxes { get; set; }

        List<XY> xyPtsList = new List<XY>();
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext=this;
            InitData();
        }

        void InitData()
        {
            InitXYPtsList();
            // Convert to scatter series
            var scatterSeries = new ScatterSeries<ObservablePoint>
            {
                Values = ConvertPoints(xyPtsList.Where(x => x.X>0)?.ToList()),
                GeometrySize = 20,
                Fill = new SolidColorPaint(SKColors.Red),
                Stroke = new SolidColorPaint(SKColors.Red, 2),
                XToolTipLabelFormatter=x => $"X:{x.Model.X}",
                YToolTipLabelFormatter=y => $"Y:{y.Model.Y:N4}"
            };

            Series = new ISeries[] { scatterSeries };
            XAxes=new Axis[]
            {
                new Axis
                {
                    Name="X Axis",
                    NamePadding=new LiveChartsCore.Drawing.Padding(0,15),
                    Labeler=value=>value.ToString("N0"),
                    MinStep=5,
                    UnitWidth=5
                }
            };

            YAxes=new Axis[]
            {
                new Axis
                {
                    Name="Y Axis",
                    NamePadding=new LiveChartsCore.Drawing.Padding(0,15),
                    Labeler=value=>value.ToString("N4"),
                    MinStep=5,
                    UnitWidth=5
                }
            };
        }

        private void InitXYPtsList()
        {
            xyPtsList.Clear();
            Random rnd = new Random();
            for (int i = 0; i<99; i+=10)
            {
                xyPtsList.Add(new XY(i, rnd.Next(0, 200)));
            }
            xyPtsList.Add(new XY(100, 200));
        }

        private static ObservablePoint[] ConvertPoints(List<XY> points)
        {
            return points.Select(p => new ObservablePoint(p.X, p.Y)).ToArray();
        }
    }

    public struct XY
    {
        public XY(int xValue, double yValue)
        {
            X= xValue;
            Y= yValue;
        }
        public int X { get; set; }
        public double Y { get; set; }
    }
}

 

 

 

 

 

image

 

posted @ 2025-08-08 17:14  FredGrit  阅读(32)  评论(0)    收藏  举报