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)必须有比清除整个网格并重新显示整个数据更好的方法

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

4

1 回答 1

2

1)为什么单击应用按钮时元素不显示

因为你没有设置Stroke. PolyLine请将此行添加到您的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 轴时,您可以模拟示波器流。

于 2016-11-21T12:16:53.080 回答