2011-08-17 28 views
6

WPF altında C# .Net altında bir GUI geliştiriyorum.Aynı zamanda gömülü aygıtla seri iletişim için bir uygulama, sık sık alınan verilerle bir çizgi grafik göstermek istiyorum.Ve ayrıca bu çizelgeleri kaydetmek ve yazdırmak için bir seçenek sunmak için bir seçenek sağlar. Bunu, ücretsiz kütüphaneler veya yazılımların desteği ile dinamik olarak çizebilir miyim?C# WPF Uygulamasında Dinamik Çizgi grafiği

cevap

9

Tüm WPF grafik gereksinimleri için Dynamic Data Display kullanıyorum. Çizelgeleri kaydetmeyi destekler, çok hızlıdır, kesintisiz yakınlaştırma ve kaydırma sağlar. Ad alanı: xmlns: d3 = "http://research.microsoft.com/DynamicDataDisplay/1.0"

XAML:

<d3:ChartPlotter Name="plotter" Background="White"> 
    <d3:ChartPlotter.Resources> 
     <conv:Date2AxisConverter x:Key="Date2AxisConverter"/> 
    </d3:ChartPlotter.Resources> 
    <d3:ChartPlotter.HorizontalAxis> 
     <d3:HorizontalDateTimeAxis Name="dateAxis"/> 
    </d3:ChartPlotter.HorizontalAxis> 
    <d3:Header Content="{Binding PlotHeader}"/> 
    <d3:VerticalAxisTitle Content="Value"/> 
    <d3:HorizontalAxisTitle Content="Date"/> 
</d3:ChartPlotter> 

C# Kod: Dönüştürücü

public class Date2AxisConverter : IValueConverter 
{ 
    #region IValueConverter Members 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is DateTime && targetType == typeof(double)) 
     { 
      return ((DateTime)value).Ticks/10000000000.0; 
      // See constructor of class Microsoft.Research.DynamicDataDisplay.Charts.DateTimeAxis 
      // File: DynamicDataDisplay.Charts.Axes.DateTime.DateTimeAxis.cs 

      // alternatively, see the internal class Microsoft.Research.DynamicDataDisplay.Charts.DateTimeToDoubleConversion 

     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     // try Microsoft.Research.DynamicDataDisplay.Charts.DateTimeAxis.DoubleToDate 
     throw new NotSupportedException(); 
    } 

    #endregion 
} 

C# Code kullandı: Grafiği Temizleme ve çizgi grafiği oluşturma, Burada benim StockasticProcessPoint bir alan "DateTime t" ve bir alan "Çift değer" olan bir yapıdır.

using Microsoft.Research.DynamicDataDisplay; 
using System.Collections.ObjectModel; 
using Microsoft.Research.DynamicDataDisplay.DataSources; 

public void ClearLines() 
{ 
    var lgc = new Collection<IPlotterElement>(); 
    foreach (var x in plotter.Children) 
    { 
     if (x is LineGraph || x is ElementMarkerPointsGraph) 
      lgc.Add(x); 
    } 

    foreach (var x in lgc) 
    { 
     plotter.Children.Remove(x); 
    } 
} 

internal void SendToGraph() { 

    IPointDataSource _eds = null; 
    LineGraph line; 

    ClearLines(); 

    EnumerableDataSource<StochasticProcessPoint> _edsSPP; 
    _edsSPP = new EnumerableDataSource<StochasticProcessPoint>(myListOfStochasticProcessPoints); 
    _edsSPP.SetXMapping(p => dateAxis.ConvertToDouble(p.t)); 
    _edsSPP.SetYMapping(p => p.value); 
    _eds = _edsSPP; 

    line = new LineGraph(_eds); 
    line.LinePen = new Pen(Brushes.Black, 2); 
    line.Description = new PenDescription(Description); 
    plotter.Children.Add(line); 
    plotter.FitToView(); 
} 

Bununla, WPF'de bir grafiği çizebilmeniz gerekir. Seri bağlantı noktasından geri döndüğünde veri eklemek sorun olmamalı. Ayrıca DynamicDataDisplay'den bağlanan örneklere de bakabilirsiniz.

+0

Bu kitaplık dosyalarını projeme nasıl ekleyebilirim. Tüm .dll dosyalarını eklemek zorunda olup olmadığımı indirdim – Mukthi

+0

Visual Studio'da, projenin Referanslar klasöründe -> Add Reference. Projenize DynamicDataDisplay.dll dosyasını ekleyin. Diğer harici referanslarla aynı. – NetSquirrel

+2

Check out: Kaynak kodu ve nuget kurulumu için https://github.com/apoydence/DynamicDataDisplay ve https://www.nuget.org/packages/DynamicDataDisplay/. – Andrew

İlgili konular