2016-11-20 66 views
2

我想为示波器设计一个GUI作为我的MTech项目的一部分。在用户输入X轴和Y轴后,我没有问题设置刻度,但是我在显示波形时遇到了麻烦。现在,我正在使用PolyLine。每次收到新值时,disp数组都会更新,当前内容被清除并显示波形。 这是我写的一段代码,只是为了添加元素并清除Grid示波器显示

public partial class MainWindow : Window 
{ 
    int[] disp = new int[500]; 
    private int x = 0; 
    Polyline Wave=new Polyline(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void SetValue_Click(object sender, RoutedEventArgs e) 
    { 
     x++; 
     SetValue_disp(x); 
    } 

    private void SetValue_disp(int x) 
    { 
     for (int i = 0; i < disp.Length; i++) 
      disp[i] = x; 
    } 

    private void Clear_Click(object sender, RoutedEventArgs e) 
    { 
     TheDisp.Children.Clear(); 
    } 

    private void Apply_Click(object sender, RoutedEventArgs e) 
    { 
     Wave.StrokeThickness = 2; 
     int i = 0; 
     foreach (int isp in disp) 
     { 
      Wave.Points.Add(new Point(i, isp)); 
      i++; 
     } 
     TheDisp.Children.Add(Wave); 
    } 
} 

我有以下疑惑 1)为什么没有当点击应用按钮 2)必须有一个更好的办法,而不是清除整个电网和显示的元素重新显示整个数据全部再次

任何形式的帮助表示赞赏。

+0

多一点信息会有帮助。什么'类型'是'TheDisp'?让所有信息重现您的问题将是一件好事。 –

+0

TheDisp是一个网格 –

回答

2

1)为什么不显示的元素时,它的应用按钮

点击,因为你没有设置PolyLineStroke财产。请加入这一行到您的Apply_Click方法:

Wave.Stroke = Brushes.Red; 

2)必须有一个更好的办法,而不是清除整个电网和所有一遍

重新显示整个数据自点实际上在对象PolyLine它应该足以在那里处理它们。添加Wave马上到Graph.Children在构造函数中:

public MainWindow() 
{ 
    InitializeComponent(); 

    TheDisp.Children.Add(Wave); 
} 

如果现在值添加到它们将显示在图表中的Wave.Points。现在,随着时间的推移和新的价值观的加入,只需添加新的价值观,并为您添加的每个价值观去除第一个价值观。

Wave.Points.Add(new Point(X, Y)); 
// remove the first value 
Wave.Points.RemoveAt(0); 

点数将保持不变。当您正确处理X轴时,您可以模拟示波器流程。