Files
hoodFieldOfView/头罩视野slove/头罩视野/Views/RecordDate.xaml.cs

145 lines
4.8 KiB
C#
Raw Normal View History

2026-04-22 10:24:28 +08:00
using Microsoft.Win32;
using Sunny.UI;
2026-04-18 18:14:12 +08:00
using System;
using System.Collections.Generic;
2026-04-22 10:24:28 +08:00
using System.IO;
2026-04-18 18:14:12 +08:00
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;
namespace .Views
{
/// <summary>
/// RecordDate.xaml 的交互逻辑
/// </summary>
///
2026-04-22 08:44:19 +08:00
2026-04-18 18:14:12 +08:00
public partial class RecordDate : Page
{
2026-04-22 10:24:28 +08:00
// 数据存储列表
private List<dynamic> LeftEyeDataList = new List<dynamic>();
private List<dynamic> RightEyeDataList = new List<dynamic>();
// 长按清除用
private bool _isClearPressed = false;
private Thread _clearThread;
2026-04-18 18:14:12 +08:00
public RecordDate()
{
InitializeComponent();
2026-04-22 08:44:19 +08:00
DynamicHeader();
2026-04-22 10:24:28 +08:00
// 2. 调用(名字和上面的变量一致)
AddDataRow(dataGrid1, LeftEyeDataList, 64);
AddDataRow(dataGrid2, RightEyeDataList, 64);
// 测试数据
/// <summary>
/// 给表格添加一行数据(自动存起来,用于保存)
/// </summary>
/// <param name="dg">目标表格</param>
/// <param name="dataList">数据存储列表</param>
/// <param name="channelCount">通道数量 64/32</param>
void AddDataRow(DataGrid dg, List<dynamic> dataList, int channelCount)
{
// 创建一行数据
dynamic row = new System.Dynamic.ExpandoObject();
var dict = (IDictionary<string, object>)row;
// 固定列
dict["Id"] = dataList.Count + 1;
dict["Time"] = DateTime.Now.ToString("HH:mm:ss");
dict["Date"] = DateTime.Now.ToString("yyyy-MM-dd");
2026-04-18 18:14:12 +08:00
2026-04-22 10:24:28 +08:00
// 通道列Ch1 ~ Ch64
for (int i = 1; i <= channelCount; i++)
{
dict[$"Ch{i}"] = 0; // 这里你可以替换成真实数据
}
2026-04-22 08:44:19 +08:00
2026-04-22 10:24:28 +08:00
// 存起来 + 显示
dataList.Add(row);
dg.Items.Add(row);
}
2026-04-22 08:44:19 +08:00
}
//动态生成表头
void DynamicHeader()
{
// 2. 循环生成 64 个 ch 列
for (int i = 1; i <= 64; i++)
2026-04-18 18:14:12 +08:00
{
2026-04-22 08:44:19 +08:00
dataGrid1.Columns.Add(new DataGridTextColumn
{
Header = $"ch.{i}",
Binding = new System.Windows.Data.Binding($"Ch{i}")
});
dataGrid2.Columns.Add(new DataGridTextColumn
{
Header = $"ch.{i}",
Binding = new System.Windows.Data.Binding($"Ch{i}")
});
}
2026-04-18 18:14:12 +08:00
}
2026-04-22 08:44:19 +08:00
2026-04-22 10:24:28 +08:00
//#endregion
2026-04-22 08:44:19 +08:00
2026-04-22 10:24:28 +08:00
// 保存左眼
private void btnSaveLeft_Click(object sender, RoutedEventArgs e)
2026-04-18 18:14:12 +08:00
{
2026-04-22 10:49:59 +08:00
//SaveToCsv(LeftEyeDataList, $"左眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
ModbusHelper.SaveToCsv(LeftEyeDataList, $"左眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
2026-04-18 18:14:12 +08:00
}
2026-04-22 08:44:19 +08:00
2026-04-22 10:49:59 +08:00
2026-04-22 10:24:28 +08:00
// 保存右眼
private void btnSaveRight_Click(object sender, RoutedEventArgs e)
{
2026-04-22 10:49:59 +08:00
ModbusHelper.SaveToCsv(RightEyeDataList,$"右眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
2026-04-22 10:24:28 +08:00
}
private void btnClear_MouseDown(object sender, MouseButtonEventArgs e)
{
_isClearPressed = true;
_clearThread = new Thread(() =>
{
Thread.Sleep(500); // 长按1秒触发
if (_isClearPressed)
{
Application.Current.Dispatcher.Invoke(() => ClearAllData());
}
});
_clearThread.Start();
}
// 清除所有数据
private void ClearAllData()
{
LeftEyeDataList.Clear();
dataGrid1.Items.Clear();
RightEyeDataList.Clear();
dataGrid2.Items.Clear();
MessageBox.Show("数据已清除");
}
private void btnClear_MouseUp(object sender, MouseButtonEventArgs e)
{
_isClearPressed = false;
_clearThread?.Join(100); // 等待线程结束最多100毫秒然后强制结束
}
2026-04-22 08:44:19 +08:00
2026-04-18 18:14:12 +08:00
private void GoHome(object s, RoutedEventArgs e) => NavigationService.Content = null;
private void GoTest(object s, RoutedEventArgs e) => NavigationService.Content = new Views.PageTest();
private void GoRecord(object s, RoutedEventArgs e) => NavigationService.Content = new Views.RecordDate();
private void GoView(object s, RoutedEventArgs e) => NavigationService.Content = new Views.RecordPage();
//NavigationService.Navigate(new Views.RecordDate()); 页面相互跳转
}
}