WPF(Chart),그래프

C# 공부중·2024년 8월 19일

LiveChart를 이용한 구형 ,반원형 만들기

Install 커맨드

아래 두개의 코드 전부 실행하여 설치

Install-Package LiveCharts
Install-Package LiveCharts.Wpf

xmal 설정

Grid를 두개로 나눠 원하는 Chart를 표시 따로 표시하기

<Window x:Class="RAM_and_Disk.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
        Title="System Monitor" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0">
            <lvc:PieChart LegendLocation="Bottom" DataClick="Chart_OnDataClick" Hoverable="False" DataTooltip="{x:Null}">
                <lvc:PieChart.Series>
                    <lvc:PieSeries Title="RAM Used" Values="{Binding RamUsed}" DataLabels="True"
                               LabelPoint="{Binding PointLabel}"/>
                    <lvc:PieSeries Title="RAM Free" Values="{Binding RamFree}" DataLabels="True"
                               LabelPoint="{Binding PointLabel}"/>
                </lvc:PieChart.Series>
            </lvc:PieChart>
        </Grid>

        <Grid Grid.Column="1">
            <lvc:PieChart LegendLocation="Bottom" DataClick="Chart_OnDataClick" Hoverable="False" DataTooltip="{x:Null}">
                <lvc:PieChart.Series>
                    <lvc:PieSeries Title="Disk Used" Values="{Binding DiskUsed}" DataLabels="True"
                               LabelPoint="{Binding PointLabel}"/>
                    <lvc:PieSeries Title="Disk Free" Values="{Binding DiskFree}" DataLabels="True"
                               LabelPoint="{Binding PointLabel}"/>
                </lvc:PieChart.Series>
            </lvc:PieChart>
        </Grid>
    </Grid>
</Window>

XAML.Cs 설정하기

아래의 코드에대한 자세한 설명은 RAM Disk 용량 가져오기에 있으니 확인해보면 좋을것.
매우심플하게 구형 형태 작성완료

using LiveCharts;
using LiveCharts.Wpf;
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Threading;

namespace RAM_and_Disk
    {
    public partial class MainWindow : Window
        {

        public ChartValues<double> RamUsed { get; set; }
        public ChartValues<double> RamFree { get; set; }
        public ChartValues<double> DiskUsed { get; set; }
        public ChartValues<double> DiskFree { get; set; }

        private PerformanceCounter ramCounter;
        private PerformanceCounter diskCounter;
        private DispatcherTimer timer;

        public MainWindow()
            {
            InitializeComponent();

            RamUsed = new ChartValues<double> { 0 };
            RamFree = new ChartValues<double> { 100 };
            DiskUsed = new ChartValues<double> { 0 };
            DiskFree = new ChartValues<double> { 100 };

            ramCounter = new PerformanceCounter("Memory", "% Committed Bytes In Use");
            diskCounter = new PerformanceCounter("LogicalDisk", "% Free Space", "_Total");

            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += Timer_Tick;
            timer.Start();

            DataContext = this;
            }

        private void Timer_Tick(object sender, EventArgs e)
            {
            float ramUsage = ramCounter.NextValue();
            float diskFree = diskCounter.NextValue();

            RamUsed[0] = Math.Round(ramUsage, 2);
            RamFree[0] = Math.Round(100 - ramUsage, 2);
            DiskUsed[0] = Math.Round(100 - diskFree, 2);
            DiskFree[0] = Math.Round(diskFree, 2);
            }

        public Func<ChartPoint, string> PointLabel { get; set; } = chartPoint => string.Format("{1:P}", chartPoint.Y, chartPoint.Participation);

        private void Chart_OnDataClick(object sender, ChartPoint chartpoint)
            {
            var chart = (LiveCharts.Wpf.PieChart)chartpoint.ChartView;
            foreach (PieSeries series in chart.Series)
                series.PushOut = 0;

            var selectedSeries = (PieSeries)chartpoint.SeriesView;
            selectedSeries.PushOut = 8;
            }
        }
    }

[참조] :https://v0.lvcharts.com/App/examples/v1/WinForms/Pie%20or%20Doughnut

0개의 댓글