WPF入门:加入图表与绑定数据


前言

根据网上的资料,整理了下Wpf的柱状图,折线图和饼状图的创建,并且绑定后端数据


一、安装dll

从Nuget中下载dll
在这里插入图片描述

二、编写图形

1.图形展示

在这里插入图片描述


2.代码

以上新建窗口代码如下:

<Window x:Class="WpfApp2.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:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        Title="看板" Height="650" Width="1000">
    <Grid Background="Black">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <!--柱状图-->
            <Grid Grid.Column="0">
                <lvc:CartesianChart Margin="10,10,10,5">
                    <!--x轴-->
                    <lvc:CartesianChart.AxisX>
                        <lvc:Axis Labels="1,2,3,4,5,6,7,8,9">
                            <lvc:Axis.Separator>
                                <lvc:Separator Step="1" StrokeThickness="0"></lvc:Separator>
                            </lvc:Axis.Separator>
                        </lvc:Axis>
                    </lvc:CartesianChart.AxisX>

                    <!--y轴-->
                    <lvc:CartesianChart.Series>
                        <lvc:ColumnSeries Values="{Binding Y1LineSeries}" Title="y1数据"  MaxColumnWidth="10">
                            <!--渐变色-->
                            <lvc:ColumnSeries.Fill>
                                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                    <GradientStop Color="#5ba585" Offset="0"></GradientStop>
                                    <GradientStop Color="#a0c69d" Offset="1"></GradientStop>
                                </LinearGradientBrush>
                            </lvc:ColumnSeries.Fill>
                        </lvc:ColumnSeries>

                        <lvc:ColumnSeries Values="15,55,15,40,38,45,56,42,24" Title="y2数据"  MaxColumnWidth="10">
                            <!--渐变色-->
                            <lvc:ColumnSeries.Fill>
                                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                    <GradientStop Color="#e5c5c8" Offset="0"></GradientStop>
                                    <GradientStop Color="#ca5863" Offset="1"></GradientStop>
                                </LinearGradientBrush>
                            </lvc:ColumnSeries.Fill>
                        </lvc:ColumnSeries>
                    </lvc:CartesianChart.Series>

                    <!--Y刻度-->
                    <lvc:CartesianChart.AxisY>
                        <lvc:Axis MinValue="0" MaxValue="500" >
                            <lvc:Axis.Separator>
                                <lvc:Separator Step="100" Stroke="#11ffffff"></lvc:Separator>
                            </lvc:Axis.Separator>
                        </lvc:Axis>
                    </lvc:CartesianChart.AxisY>
                </lvc:CartesianChart>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10">
                    <Border Height="6" Width="6" Background="#5ba585"  Margin="5,0"></Border>
                    <TextBlock Text="y1数据" FontSize="10" Foreground="#44ffffff"></TextBlock>

                    <Border Height="6" Width="6" Background="#ca5863"  Margin="5,0"></Border>
                    <TextBlock Text="y2数据" FontSize="10" Foreground="#44ffffff"></TextBlock>
                </StackPanel>
            </Grid>
            <!--饼状图-->
            <Grid Grid.Column="1">
                <!--定义数据标签样式-->
                <lvc:PieChart InnerRadius="45" Margin="10,20,0,10">
                    <!--饼形图数据显示-->
                    <lvc:PieChart.Resources>
                        <Style TargetType="lvc:PieSeries">
                            <Setter Property="DataLabelsTemplate">
                                <Setter.Value>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding Point.SeriesView.Title}" Margin="0,0,5,0" Foreground="#44ffffff"></TextBlock>
                                            <TextBlock Text="{Binding Point.SeriesView.Values[0]}" Foreground="#44ffffff"></TextBlock>
                                        </StackPanel>
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </lvc:PieChart.Resources>
                    <!--饼形图数据-->
                    <lvc:PieChart.Series>
                        <lvc:PieSeries Values="20" Title="a" StrokeThickness="0" DataLabels="True" LabelPosition="OutsideSlice"></lvc:PieSeries>
                        <lvc:PieSeries Values="30" Title="b" StrokeThickness="0" DataLabels="True" LabelPosition="OutsideSlice"></lvc:PieSeries>
                        <lvc:PieSeries Values="35" Title="c" StrokeThickness="0" DataLabels="True" LabelPosition="OutsideSlice"></lvc:PieSeries>
                        <lvc:PieSeries Values="40" Title="d" StrokeThickness="0" DataLabels="True" LabelPosition="OutsideSlice"></lvc:PieSeries>
                    </lvc:PieChart.Series>
                </lvc:PieChart>
            </Grid>
        </Grid>
        <!--折线图-->
        <Grid Grid.Row="1">
            <lvc:CartesianChart Margin="10,10,10,5">
                <lvc:CartesianChart.AxisX>
                    <lvc:Axis Labels="1,2,3,4,5,6">
                        <lvc:Axis.Separator>
                            <lvc:Separator Step="1" StrokeThickness="0"></lvc:Separator>
                        </lvc:Axis.Separator>
                    </lvc:Axis>
                </lvc:CartesianChart.AxisX>

                <!--Y数据-->
                <lvc:CartesianChart.Series>
                    <lvc:LineSeries Values="7,14,5,6,10,12" PointGeometrySize="0" Stroke="#5ba585" >
                        <!--渐变-->
                        <lvc:LineSeries.Fill>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                <GradientStop Color="#5ba585" Offset="0"></GradientStop>
                                <GradientStop Color="Transparent" Offset="1"></GradientStop>
                            </LinearGradientBrush>
                        </lvc:LineSeries.Fill>
                    </lvc:LineSeries>
                </lvc:CartesianChart.Series>

                <!--Y刻度-->
                <lvc:CartesianChart.AxisY>
                    <lvc:Axis MinValue="0" MaxValue="15" >
                        <lvc:Axis.Separator>
                            <lvc:Separator Step="5" Stroke="#11ffffff"></lvc:Separator>
                        </lvc:Axis.Separator>
                    </lvc:Axis>
                </lvc:CartesianChart.AxisY>
            </lvc:CartesianChart>
        </Grid>
    </Grid>
</Window>

3.绑定数据

采用mvvm结构,新建ViewModels文件夹与MainWindowVM类
MainWindowVM类代码如下(Y1LineSeries为绑定数据):

using LiveCharts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApp2.ViewModels
{
    class MainWindowVM : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler? PropertyChanged;

        public ChartValues<double> Y1LineSeries { get; set; }

        public MainWindowVM()
        {
            Random random = new Random();

            Y1LineSeries = new ChartValues<double>();
            int Count = 0;

            Task.Run(() =>
            {
                while (Count<9)
                {
                    Y1LineSeries.Add(random.Next(0, 500));

                    Count++;
                    Thread.Sleep(2000);
                }
            });
        }
    }
}

前台界面MainWindow.xaml引入上面文件:

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;
using WpfApp2.ViewModels;

namespace WpfApp2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        /// <summary>
        /// 视图模型
        /// </summary>
        MainWindowVM mainWindowVM = new MainWindowVM();
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = mainWindowVM;//引用viewmodel文件
        }
    }
}

在这里插入图片描述
完成后运行可看到柱状图y1数据随机显示,y2数据固定显示
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows Presentation Foundation (WPF) 中创建饼状图并设置各个扇区的大小,你可以使用`DataTemplate`、`Chart`控件以及一些数据绑定来实现。通常会配合`ItemsControl`或`RadialGraph`类使用。以下是基本步骤: 1. 首先,你需要准备包含每个扇区数据数据模型,例如`ObservableCollection`,其中包含每个部分的名称和相应的值。 ```csharp public class PieChartDataItem { public string Label { get; set; } public double Value { get; set; } } ``` 2. 创建一个`PieChart`元素,并为其设置`ItemsSource`属性指向你的数据集合。 ```xml <Window x:Class="YourNamespace.MainWindow" xmlns:wpfToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"> <Grid> <wpfToolkit:Chart Height="200" Width="200"> <wpfToolkit:Chart.Series> <wpfToolkit:PieSeries ItemsSource="{Binding YourPieChartData}"> <wpfToolkit:PieSeries.DataPointStyle> <wpfToolkit:DataPointStyle Foreground="White" /> </wpfToolkit:PieSeries.DataPointStyle> </wpfToolkit:PieSeries> </wpfToolkit:Chart.Series> </wpfToolkit:Chart> </Grid> </Window> ``` 3. 在XAML中,通过`ItemsSource`属性,WPF会自动计算扇区的大小基于数据值,并分配给每个扇区。 4. 如果你想手动控制某个扇区的大小,可以在`PieSeries`中添加一个`ValueField`属性,指明哪个字段用于计算扇区大小,同时可以使用`StartAngle`和`EndAngle`调整扇区的位置。 ```xml <wpfToolkit:PieSeries ValueField="Value" StartAngle="90" EndAngle="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type wpfToolkit:Chart}}}"/> ``` 这将根据图表的实际宽度动态调整每个扇区的结束角度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值