精华内容
下载资源
问答
  • 2017-06-08 10:00:38
    标记一篇WPF画曲线工具
    篇测
    http://www.scottlogic.com/blog/2010/12/10/visiblox-visifire-dynamicdatadisplay-charting-performance-comparison.html
    第三方WPF作图工具很全的网页
    http://wpftutorial.net/3rdPartyLibs.html
    正在用ComponentOne的Chart,我也没具体测过,据说只能对付两万个点,多了就很慢很慢。 VisiFire我也用过几天,据客服说1万个点要用9-10秒。
    我是新手不知道说得对不对,目前感觉这两个都是胜在灵活性,同一个图里可以同时画不同类型的图,比如柱状图,曲线图和面积图,可以运行时调整每条数据的颜色和类型,添加多坐标轴,删减曲线等等。但是速度一般,以上的这两个工具因为速度原因估计楼主不用考虑了。建议关注一下Visiblox和Dynamic Data Display。
    更多相关内容
  • 著名的WPF绘图控件DynamicDataDisplay开发手册,英文的chm格式,下载后缺省是不让打开的,请去百度搜索“chm 无法显示”进行解决。
  • 网上的资源比较分散,本文档将这些资源打包在一起,DynamicDataDisplay库+例程+文档,包含DynamicDataDisplay v0.3 Documentation.chm,DynamicDataDisplay.dll以及官网的wiki例程等。
  • C# WPF绘图控件Dynamic Data Display简单使用
  • wpf画图控件_Scichart

    热门讨论 2017-11-23 09:40:51
    wpf 画图控件 炫酷 破解 wpf 画图控件 炫酷 破解 wpf 画图控件 炫酷 破解 wpf 画图控件 炫酷 破解
  • wpf使用Chart控件绘制线图

    千次阅读 2020-10-15 15:38:01
    ​ 最近再项目中,突然用到了绘图的功能,虽然只是将用户数据简单的展示出来,但是介于之前从来没有用过wpf的原生控件绘图,所以就先再网上找了demo,尝试了一下,这里当作记录。 ​ 测试程序运行结果如下: ​ ​ ...

    ​ 最近再项目中,突然用到了绘图的功能,虽然只是将用户数据简单的展示出来,但是介于之前从来没有用过wpf的原生控件绘图,所以就先再网上找了demo,尝试了一下,这里当作记录。

    ​ 测试程序运行结果如下:

    绘图结果

    ​ 电脑上安装的是vs2019,没有在控件里面看到Chart,发现要添加两个引用

    添加dll列表
    添加后,就可以开始wpf界面代码添加了,具体代码如下:

    <Window x:Class="DrawingView.GraphView"
            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:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
            xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
            xmlns:Chr="clr-namespace:System.Windows.Forms.DataVisualization.Charting;assembly=System.Windows.Forms.DataVisualization"
            xmlns:local="clr-namespace:DrawingView"
            mc:Ignorable="d"
            Title="GraphView" Height="450" Width="800">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="40"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0">
                <Button Content="初始化" x:Name="InitBtn" Click="InitBtn_Click" Width="80" Height="18" Margin="10,0"/>
                <Button Content="开始" x:Name="StartBtn" Click="StartBtn_Click" Width="80" Height="18" Margin="10,0"/>
            </StackPanel>
    
            <Border Grid.Row="1" BorderThickness="2" BorderBrush="LightGray" Margin="10" CornerRadius="5">
                <wfi:WindowsFormsHost>
                    <Chr:Chart x:Name="chart1"/>
                </wfi:WindowsFormsHost>
            </Border>
        </Grid>
    </Window>
    
    

    最主要的代码是这里,先添加两个引用,然后再xaml中添加一个容器,最后把chart控件放到容器中:

    <wfi:WindowsFormsHost>
    	<Chr:Chart x:Name="chart1"/>
    </wfi:WindowsFormsHost>
    

    接下来看看后台代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows;
    using System.Windows.Forms.DataVisualization.Charting;
    
    namespace DrawingView
    {
        /// <summary>
        /// GraphView.xaml 的交互逻辑
        /// </summary>
        public partial class GraphView : Window
        {
            private Queue<double> dataQueue = new Queue<double>(100);
    
            private Queue<double> dataQueueSin = new Queue<double>(100);
    
            public GraphView()
            {
                InitializeComponent();
            }
    
            private void InitBtn_Click(object sender, RoutedEventArgs e)
            {
                InitChart();
            }
    
            private void StartBtn_Click(object sender, RoutedEventArgs e)
            {
                UpdateQueueValue();
                this.chart1.Series[0].Points.Clear();
                for (int i = 0; i < dataQueue.Count; i++)
                {
                    this.chart1.Series[0].Points.AddXY((i + 1), dataQueue.ElementAt(i));
                }
                this.chart1.Series[1].Points.Clear();
                for (int i = 0; i < dataQueueSin.Count; i++)
                {
                    this.chart1.Series[1].Points.AddXY((i + 1), dataQueueSin.ElementAt(i));
                }
            }
    
            private void UpdateQueueValue()
            {
                Random r = new Random();
                for (int i = 0; i < 100; i++)
                {
                    //对象添加到 System.Collections.Generic.Queue<T> 的结尾处。
                    dataQueue.Enqueue(r.Next(0, 100));
                }
    
                int curValue = 0;
                for (int i = 0; i < 100; i++)
                {
                    curValue = curValue % 360;
                    dataQueueSin.Enqueue(50 * Math.Sin(curValue * Math.PI / 180) + 50);
                    curValue += 10;
                }
            }
    
            private void InitChart()
            {
                //定义图标区域
                this.chart1.ChartAreas.Clear();
                ChartArea chartArea1 = new ChartArea("C1");
                this.chart1.ChartAreas.Add(chartArea1);
    
                ChartArea chartArea2 = new ChartArea("C2");
                this.chart1.ChartAreas.Add(chartArea2);
    
                //定义储存和显示点的容器
                this.chart1.Series.Clear();
                Series series1 = new Series("S1");
                series1.ChartArea = "C1";
                this.chart1.Series.Add(series1);
    
                Series series2 = new Series("S2");
                series2.ChartArea = "C2";
                this.chart1.Series.Add(series2);
    
                //设置图标显示样式
                foreach(var item in this.chart1.ChartAreas)
                {
                    item.AxisX.Minimum = 0;
                    item.AxisX.Maximum = 100;
                    item.AxisX.Interval = 5;
                    item.AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
                    item.AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
                }
                //设置标题
                this.chart1.Titles.Clear();
                this.chart1.Titles.Add("S1");
                this.chart1.Titles[0].Text = "图形绘制展示";
                this.chart1.Titles[0].ForeColor = System.Drawing.Color.RoyalBlue;
                this.chart1.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
                //设置图标显示样式
                this.chart1.Series[0].Color = System.Drawing.Color.Red;
                this.chart1.Series[1].Color = System.Drawing.Color.Red;
    
                this.chart1.Series[0].ChartType = SeriesChartType.Line;
    
                this.chart1.Series[1].ChartType = SeriesChartType.Spline;
    
                this.chart1.Series[0].Points.Clear();
    
                // 清除dataQueue中所有数据
                dataQueue.Clear();
                dataQueueSin.Clear();
            }
        }
    }
    
    

    dataQueuedataQueueSin是用来存放绘图点的(y数据点),一个是随机数,一个是正/余弦波。在代码中,主要就是利用chart控件的集合属性画图,最主要的三个属性ChartAreas、Series、Legends,在这里我没有用到Legends,但是可以再我推荐的博客里面看到使用和详解。

    1. ChartAreas属性:ChartAreas可以理解为是一个图表的绘图区,图表控件并不限制你添加多少个绘图区域,你可以根据你的需要进行添加,对于每个绘图区域,都可以设置独立的属性,如:X,Y轴属性、背景等。但是他只开辟了一个可作图的空间,并不包含要作图的数据。
    2. Series属性:图表集合,就是最终看到的饼图、柱状图、线图、点图等构成数据的集合。每个Series属性,可以给他指定到特定的绘图区中。
    3. Legends属性:MSChart的图例默认不显示,可以通过属性配置实现展示。

    ​ chart控件的基本信息,可以参考下面这篇博客:

    ​ https://blog.csdn.net/qq_27825451/article/details/81305387

    ​ chart控件可以绘制的其他图形基本教程,可以参考下面这篇博客:

    ​ https://www.cnblogs.com/mazhenyu/p/9498439.html

    ​ 然后还看了一篇总结:

    ​ https://blog.csdn.net/daisy0923/article/details/73325681

    ​ 上面的这三个博客供参考,具体的还是要自己动手尝试才行。

    展开全文
  • WPF 的画图控件Chart应用于 实时显示曲线

    1. 属性

    层级:
    表:chart
    线:Series
    点:Points(DataPoint)

    1.1 图表的各种属性

    在这里插入图片描述

    1.2 线的属性

    Series:图表序列->图表集合,就是最终看到的饼图、柱状图、线图、点图等构成的.

       1.ChartArea:图表所属的绘图区域名称
    
         2.ChartType:图表类型(柱形、饼形、线形、点形、折线图等,有多达几十种之多)
    
         3.IsValueShownAsLabel:是否显示数据点标签,如果为true,在图表中显示每一个数据值
    
         4.Label:数据点标签文本
    
         5.LabelFormat:数据点标签文本格式
    
         6.LabelAngle:标签字体角度
    
         7.Legend:当前数据系列(图表)使用的图例名称
    
         8.Name:数据系列的名称
    
         9.Palette:数据系列(图表)外观定义
    
        10.Points:数据点集合,不添加这个,窗体在初使化后什么都没有
    
        11.XValueMember:横坐标绑定的数据源
    
        12.XValueType:横坐标数字的类型,默认为auto,即根据传入的数据自动规定类型
    
        13.YValueMembers:纵坐标绑定的数据源
    
        14.YValueType:纵坐标数字的类型默认为auto,即根据传入的数据自动规定类型
    
        15.XAxisType:只是所要使用的坐标轴是主坐标还是副坐标,它有两个取值,Primary和Sencondary
    
        16.YAxisType:
    
        17. 映射区(TooTip):鼠标放在数据点上出现的小提示,建议用代码控制
    

    2. 示例

    在一个区域里有

            <Grid Name="Simon">
    
            </Grid>
    

    在C#文件源码:

    #region 实时折线图
            public Timer threadTimer { get; private set; }
            public Chart chart= null;
            private List<string> cherry = new List<string>() { "33", "75", "60", "98", "67", "88", "39", "45", "13", "22", "45", "80" };
       
            private List<DateTime> LsTimeRT = new List<DateTime>();
            public void InitTimer()
            {
                threadTimer = new System.Threading.Timer(new TimerCallback(TimerUp), null, 1000, 500);
            }
            private void InitChart()
            {
                //创建一个图标
                 this.chart = new Chart();
    
                //设置图标的宽度和高度
                chart.Width = 580;
                chart.Height = 380;
                chart.Margin = new Thickness(100, 5, 10, 5);
                //是否启用打印和保持图片
                chart.ToolBarEnabled = false;
    
                //设置图标的属性
                chart.ScrollingEnabled = true;//ccj false;//是否启用或禁用滚动
                chart.View3D = false; //ccj true;//3D效果显示
    
                //创建一个标题的对象
                Title title = new Title();
    
                //设置标题的名称
                title.Text = "实时曲线";
                title.Padding = new Thickness(0, 10, 5, 0);
    
                //向图标添加标题
                chart.Titles.Add(title);
    
                //初始化一个新的Axis
                Axis xaxis = new Axis();
                //设置Axis的属性
                //图表的X轴坐标按什么来分类,如时分秒
                xaxis.IntervalType = IntervalTypes.Milliseconds;
                //图表的X轴坐标间隔如2,3,20等,单位为xAxis.IntervalType设置的时分秒。
                xaxis.Interval = 2000;
                //设置X轴的时间显示格式为7-10 11:20           
                xaxis.ValueFormatString = "MM秒";
                //给图标添加Axis            
                chart.AxesX.Add(xaxis);
    
                Axis yAxis = new Axis();
                //设置图标中Y轴的最小值永远为0           
                yAxis.AxisMinimum = 0;
                //设置图表中Y轴的后缀          
                yAxis.Suffix = "斤";
                chart.AxesY.Add(yAxis);
                // 创建一个新的数据线。               
                DataSeries dataSeries = new DataSeries();
                // 设置数据线的格式。               
                dataSeries.LegendText = "樱桃";
    
                dataSeries.RenderAs = RenderAs.Spline;//折线图
    
                dataSeries.XValueType = ChartValueTypes.DateTime;
    
                // 添加数据线到数据序列。                
                chart.Series.Add(dataSeries);
    
                //将生产的图表增加到Grid,然后通过Grid添加到上层Grid.           
                Grid gr = new Grid();
                gr.Children.Add(chart);
                Simon.Children.Clear();
                Simon.Children.Add(gr);
    
            }
    
            private void TimerUp(object state)
            {
                DateTime now = DateTime.Now;
                LsTimeRT.Add(now);
                App.Current.Dispatcher.Invoke((Action)(() =>
                {
                    
                    this.chart.Series[0].DataPoints.Clear();
                    // 设置数据点              
                    DataPoint dataPoint;
                    int ii = 30;
                    if (LsTimeRT.Count < ii)
                    {
                        for (int i = 0; i < LsTimeRT.Count; i++)
                        {
                            // 创建一个数据点的实例。                   
                            dataPoint = new DataPoint();
                            // 设置X轴点                    
                            dataPoint.XValue = LsTimeRT[i];
                            //设置Y轴点                   
                            dataPoint.YValue = double.Parse(cherry[i % 12]);
                            dataPoint.MarkerSize = 8;
                            //dataPoint.Tag = tableName.Split('(')[0];
                            //设置数据点颜色                  
                            // dataPoint.Color = new SolidColorBrush(Colors.LightGray);                   
                            dataPoint.MouseLeftButtonDown += new MouseButtonEventHandler(dataPoint_MouseLeftButtonDown);
                            //添加数据点                   
                            this.chart.Series[0].DataPoints.Add(dataPoint);
                        }
                    }
                    else
                    {
                        List<DateTime> llt = new List<DateTime>();
                        for (int i = LsTimeRT.Count - ii; i < LsTimeRT.Count; i++)
                        {
                            // 创建一个数据点的实例。                   
                            dataPoint = new DataPoint();
                            // 设置X轴点                    
                            dataPoint.XValue = LsTimeRT[i];
                            //设置Y轴点                   
                            dataPoint.YValue = double.Parse(cherry[i % 12]);
                            dataPoint.MarkerSize = 8;
                            //dataPoint.Tag = tableName.Split('(')[0];
                            //设置数据点颜色                  
                            // dataPoint.Color = new SolidColorBrush(Colors.LightGray);                   
                            dataPoint.MouseLeftButtonDown += new MouseButtonEventHandler(dataPoint_MouseLeftButtonDown);
                            //添加数据点                   
                            this.chart.Series[0].DataPoints.Add(dataPoint);
                        }
    
    
    
                    }
                }));
            }
    
            private void ButRealTimeSpline_Click(object sender, RoutedEventArgs e)
            {
                Simon.Children.Clear();
                InitChart();
                InitTimer();
    
            }
            #endregion
        
    

    ButRealTimeSpline_Click :按钮事件触发
    threadTimer :定时器
    TimerUp:定时器回调函数
    chart:图
    cherry :数据

    结果:
    在这里插入图片描述

    展开全文
  • wpf-绘图-基础图形

    千次阅读 2020-11-26 11:38:06
    绘图可以在任何一种布局控件中完成,wpf会根据容器计算相应坐标。最常用的是Canvas和Grid。 基本图形包括以下几个,都是Shaper类的派生类。 Line,直线段,可以设置Stroke Rectangle,有Stroke也有Fill Ellipse,...


    xaml绘图时矢量的。

    绘图可以在任何一种布局控件中完成,wpf会根据容器计算相应坐标。最常用的是Canvas和Grid。

    基本图形包括以下几个,都是Shaper类的派生类。

    1. Line,直线段,可以设置Stroke
    2. Rectangle,有Stroke也有Fill
    3. Ellipse,椭圆,同上
    4. Polygon,多边形。由多条直线线段围成的闭合区域,同上。
    5. Polyline,折线,不闭合,由多条首尾相接的直线段组成
    6. Path,路径,闭合。可以由若干直线、圆弧、贝塞尔曲线(由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋)组成。很强大。

    直线

    X1和Y1可以设置起点坐标,X2和Y2可以设置终点坐标。Stroke(笔触)属性的数据类型是Brush(画刷),凡是Brush的派生类都可以给这个属性赋值。

    实例

    在这里插入图片描述
    写了个用户控件。StrokeDashArray值越大虚线越疏松,Stroke是颜色,StrokeThickness是粗细,StrokeEndLineCap管的是末端的形状。

        <Grid>
            <Line X1="10" Y1="20" X2="260" Y2="20" Stroke="Red" StrokeThickness="10"/>
            <Line X1="10" Y1="40" X2="260" Y2="40" Stroke="Orange" StrokeThickness="6"/>
            <Line X1="10" Y1="60" X2="260" Y2="60" StrokeDashArray="1" Stroke="Black" StrokeThickness="2"/>
            <Line X1="10" Y1="80" X2="260" Y2="80" StrokeDashArray="2" Stroke="Black" StrokeThickness="2"/>
            <Line X1="10" Y1="100" X2="260" Y2="100" StrokeDashArray="3" Stroke="Black" StrokeThickness="2"/>
            <Line X1="10" Y1="120" X2="260" Y2="120" StrokeEndLineCap="Flat" Stroke="Blue" StrokeThickness="3"/>
            <Line X1="10" Y1="140" X2="260" Y2="140" StrokeEndLineCap="Round"  Stroke="Blue" StrokeThickness="3"/>
            <Line X1="10" Y1="160" X2="260" Y2="160" StrokeEndLineCap="Square"  Stroke="Blue" StrokeThickness="3"/>
            <Line X1="10" Y1="180" X2="260" Y2="180" StrokeEndLineCap="Triangle" StrokeThickness="10">
                <Line.Stroke>
                    <LinearGradientBrush EndPoint="0,0.5" StartPoint="1,0.5">
                        <GradientStop Color="Brown"/>
                        <GradientStop Offset="1"/>
                    </LinearGradientBrush>
                </Line.Stroke>
            </Line>
        </Grid>

    矩形

    矩形有Stroke和Fill。Stroke的设置与直线的相同,Fill的数据类型是Brush。同理,Brush的派生类也可以给它赋值。

    实例

    在这里插入图片描述

    <UserControl x:Class="pxy.DiffBrush"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:pxy"
                 mc:Ignorable="d" 
                 d:DesignHeight="390" d:DesignWidth="600">
        <Grid Margin="10">
            <Grid.RowDefinitions>
                <RowDefinition Height="160"/>
                <RowDefinition Height="10"/>
                <RowDefinition Height="160"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="180"/>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="180"/>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="180"/>
            </Grid.ColumnDefinitions>
            <!--实心填充-->
            <Rectangle Grid.Column="0" Grid.Row="0" Stroke="Black" Fill="LightBlue"/>
            <!--线性渐变-->
            <Rectangle Grid.Column="2" Grid.Row="0">
                <Rectangle.Fill>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                        <GradientStop Color="#FFB6F8F1" Offset="0"/>
                        <GradientStop Color="#FF0082BD" Offset="0.25"/>
                        <GradientStop Color="#FF95DEFF" Offset="0.6"/>
                        <GradientStop Color="#FF004F72" Offset="1"/>
                    </LinearGradientBrush>
                </Rectangle.Fill>
            </Rectangle>
            <!--径向渐变-->
            <Rectangle Grid.Column="4" Grid.Row="0">
                <Rectangle.Fill>
                    <RadialGradientBrush>
                        <GradientStop Color="#FFB6F8F1" Offset="0"/>
                        <GradientStop Color="#FF0082BD" Offset="0.25"/>
                        <GradientStop Color="#FF95DEFF" Offset="0.75"/>
                        <GradientStop Color="#FF004F72" Offset="1"/>
                    </RadialGradientBrush>
                </Rectangle.Fill>
            </Rectangle>
            <!--图片填充-->
            <Rectangle Grid.Column="0" Grid.Row="2">
                <Rectangle.Fill>
                    <ImageBrush ImageSource="/Resources/Logos/huaji.jpg" TileMode="Tile" Viewport="0,0,0.5,0.5"/>
                </Rectangle.Fill>
            </Rectangle>
            <!--矢量图填充,自定义图形-->
            <Rectangle Grid.Column="2" Grid.Row="2">
                <Rectangle.Fill>
                    <DrawingBrush TileMode="Tile" Viewport="0,0,0.2,0.2">
                        <DrawingBrush.Drawing>
                            <GeometryDrawing Brush="LightBlue">
                                <GeometryDrawing.Geometry>
                                    <EllipseGeometry RadiusX="10" RadiusY="10"/>
                                </GeometryDrawing.Geometry>
                            </GeometryDrawing>
                        </DrawingBrush.Drawing>
                    </DrawingBrush>
                </Rectangle.Fill>
            </Rectangle>
            <!--无填充,用线性渐变填充border-->
            <Rectangle Grid.Column="4" Grid.Row="2" StrokeThickness="10">
                <Rectangle.Stroke>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                        <GradientStop Color="White" Offset="0.3"/>
                        <GradientStop Color="Blue" Offset="1"/>
                    </LinearGradientBrush>
                </Rectangle.Stroke>
            </Rectangle>
        </Grid>
    </UserControl>
    

    在这里插入图片描述

    VisualBrush实例:改变按钮颜色的透明度

    在这里插入图片描述

    <UserControl x:Class="pxy.VisualBrushTest"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:pxy"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="400" Background="Orange">
        <Grid Margin="10">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="160"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="160"/>
            </Grid.ColumnDefinitions>
            <StackPanel x:Name="stackPanelLeft" Background="White">
                <Button x:Name="realButton" Content="OK" Height="40"/>
            </StackPanel>
            <Button Content=">>>" Grid.Column="1" Margin="5,0" Click="VisualBrush_Click"/>
            <StackPanel x:Name="stackPanelRight" Background="White" Grid.Column="2"/>
        </Grid>
    </UserControl>

    后台

            double o = 1.0; // 不透明度计数器
            private void VisualBrush_Click(object sender, RoutedEventArgs e)
            {
                VisualBrush visualBrush = new VisualBrush(this.realButton);
                Rectangle rect = new Rectangle();
                rect.Width = this.realButton.ActualWidth;
                rect.Height = this.realButton.ActualHeight;
                rect.Fill = visualBrush;
                rect.Opacity = o;
                o -= 0.2;
                // 别漏了
                this.stackPanelRight.Children.Add(rect);
            }
    

    椭圆

    Width==Height就是正圆。光影效果可以用RadicalGradientBrush实现。
    这些可以在blend里调整,然后代码微调。1.规整数值(毕竟机器会出很多太过精确的数值)2.调整顺序;3.去掉无用代码。
    在这里插入图片描述

        <Grid>
            <Ellipse Height="200"  Stroke="Gray" Width="200">
                <Ellipse.Fill>
                    <RadialGradientBrush GradientOrigin="0.2,0.8" RadiusX="0.75" RadiusY="0.75">
                        <RadialGradientBrush.RelativeTransform>
                            <TransformGroup>
                                <RotateTransform Angle="90" CenterX="0.5" CenterY="0.5"/>
                                <TranslateTransform/>
                            </TransformGroup>
                        </RadialGradientBrush.RelativeTransform>
                        <GradientStop Color="#FFFFFFFF" Offset="0"/>
                        <GradientStop Color="#FF444444" Offset="0.6"/>
                        <GradientStop Color="#FF999999" Offset="1"/>
                    </RadialGradientBrush>
                </Ellipse.Fill>
            </Ellipse>
        </Grid>
    展开全文
  • WPF高性能绘图的方法

    2019-05-06 12:45:31
    WPF高性能绘图的方法,使用WriteableBitmap对象,介绍使用GDI+绘制图形和操作像素的两种方法。
  • 自制WPF Chart控件

    2018-10-13 22:30:21
    进行WPF上位机开发没有找到合适的chart绘图控件,所以就自己写了一个,目前还不够完善,后续会继续完善
  • C#WPF XAML 绘图、画笔、特效 一、绘图 I.绘图有两种方式:形状绘图和几何绘图。 1.(1)、形状(Shape)是一个2D绘图类,位于System.Windows.Shape空间内。 2.包含最常用的绘图对象:Line(直线)、Rectangle(矩形)、...
  • 主要介绍了在WPF中动态加载XAML中的控件,实例分析了WPF中针对XAML中控件的动态调用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 2、Canvas 画布控件,用来画图的。也可以用来做容器用。子控件根据left/right和 top/bottom来获取相对与canvas边界的定位。 1 2 > Content="确认" Canvas.Left="305" Canvas.Top="83" Width="75"/> 3 4 Height=...
  • WPF中Chart绘图控件的使用

    千次阅读 2019-06-21 10:08:59
    WPF下有很多中绘图方法,比如:Visifire,Toolkit,Interactive Data Display,还可以使用Winform里的Chart控件等,选取适合自己的最重要。请参考shirley7758的文章:总结几种应用于WPF的Chart插件 本文重点研究...
  • 最近在研究WPF,需要用到类似Chart的控件来绘制折线图,横坐标自定义时间信息。先后研究了DynamicDataDisplay.ChartPlotter、Toolkit,因为WPF用的人太少了,这方面可以查到的资料太少了。DynamicDataDisplay....
  • Essential Studio for WPF界面控件包含了利于分析且高性能的Windows应用程序开发中所需的所有控件,如 grids、charts、gauges、menus、calendars、editors等等。同时,我们的文件格式库还允许您导出资料到Excel、...
  • WPF图表控件

    热门讨论 2011-09-07 15:45:20
    TChart控件是一个很好的图表控件,通过它可以很简单的绘制一个图表,并且功能很强大,得到的曲线可以随鼠标移动,所以它是WPF绘图的首选
  • Interactive DataDisplay是一款比较优秀的C#绘图控件,尽管与一些商业控件还有不小的差距,关键是开源免费轻量。
  • 在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样式就可以了.是否需要我们来自定义控件,...
  • WPF节点连线绘图控件GoXam

    千次阅读 2014-06-07 09:22:00
    是一款WPF和Silverlight平台下的绘图控件,可以进行数据流程图、树形图、网络图、思维导图、网格图、社会网络图、流程图、组织图、实体关系图等,完全支持各种标准的自定义功能,是silverlight和wpf平台下不可或缺的...
  • WPF:鼠标拖曳、拖动控件

    千次阅读 2021-09-02 16:34:36
    效果 布局 ,20" SizeChanged="gridChart_SizeChanged"> <Canvas Name="backCanvas" Background="Red"> <Canvas Name="foreCanvas" Background="AliceBlue"/> Canvas> Grid> 1、gridChart 是绘图区域,设置Margin是...
  • 2021-08-14 WPF控件专题 ListBox控件详解

    万次阅读 2021-08-14 12:49:55
    1.ListBox控件介绍 其中包含可选择的项的列表 手动添加项 绑定数据源 两个ListBox中的项相互移动,不太适合指定ItemsSource,Items.Add方式添加项,可以灵活的添加或移除 2.具体案例 <Grid> <ListBox Name=...
  • GoXam是一款WPF和Silverlight平台下的绘图控件,可以进行数据流程图、树形图、网络图、思维导图、网格图、社会网络图、流程图、组织图、实体关系图等,完全支持各种标准的自定义功能,是silverlight和wpf平台下不可...
  • WPF绘图控件(Shape)中添加文字 [2018.7.15] 原文:WPF绘图控件(Shape)中添加文字 [2018.7.15] Q:使用Shape的子类Ellipse画一个圆,如何在圆中添加文字?A:Shape类中不...
  • WPF好用的图表控件

    2021-06-25 16:05:05
    ECharts配合Cefsharp秒杀所有的其他图表控件,显示几十万个点小意思啦。 ECharts配置项参考:https://echarts.apache.org/zh/option.html#title ECharts C#封装:https://github.com/blazor-cn/Blazor.ECharts CEF:...
  • 1、本博客根据《WPF编程宝典:使用C# 2012和.NET 4.5 第4版》书本提供关于绘图12章/13章/14章的内容以及其例程,整理出关于绘画的结构图、程序代码如下: 2、12章的代码,集中放在一起(运行时可见)(参考pro-...
  • WPF中自定义控件

    万次阅读 2018-11-07 20:39:41
    WPF中自定义控件
  • 三、完整代码 四、使用示例 总结 前言 我们做图片编辑工具、视频编辑工具、或者画板有时需要实现控件缩放功能,比如图片或图形可以拉伸放大或缩小,实现这种功能通常需要8个点,对应4条边和4个角,在wpf中通常可以...
  • WPF 性能优化-高刷新绘图

    千次阅读 2021-12-06 15:19:44
    笔者之前接到一个需求,需要在WPF上实时显示病人实时的生理信号(心电图等)。团队开发,需求很快做完了(Unit test 效果图如下) 但是后来发布到产品上发现,资源占用比本机的要大。本地监控后,发现随着时间推移...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,320
精华内容 928
关键字:

wpf绘图控件