using BDU; using MahApps.Metro.Controls; using Newtonsoft.Json; using System; using System.IO; using System.Reflection; using System.Windows; using System.Windows.Input; namespace BDU.Windows { public partial class SystemConfigWindow : MetroWindow { // 配置副本(用于界面绑定) public SystemConfig ConfigCopy { get; } = new(); public SystemConfigWindow() { InitializeComponent(); // 使用反射复制配置属性 CopyConfigProperties(SystemConfig.Instance, ConfigCopy); DataContext = this; } // 反射复制属性方法(排除 JsonIgnore 属性) private void CopyConfigProperties(SystemConfig source, SystemConfig target) { Type type = typeof(SystemConfig); PropertyInfo[] properties = type.GetProperties(); foreach (PropertyInfo property in properties) { // 跳过 JsonIgnore 属性和只读属性 if (Attribute.IsDefined(property, typeof(JsonIgnoreAttribute)) || !property.CanWrite) { continue; } object value = property.GetValue(source)!; property.SetValue(target, value); } } // 保存配置到文件 private void SaveConfigToFile() { try { // 使用实例的SystemPath确保路径正确 string configPath = Path.Combine(ConfigCopy.SystemPath, "system.config"); // 确保目录存在 Directory.CreateDirectory(ConfigCopy.SystemPath); // 序列化保存 string json = JsonConvert.SerializeObject(ConfigCopy, Formatting.Indented); File.WriteAllText(configPath, json); } catch (Exception ex) { MessageBox.Show($"保存配置失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } private void GroupBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) { DragMove(); } } private void Save_Click(object sender, RoutedEventArgs e) { CopyConfigProperties(ConfigCopy, SystemConfig.Instance); SaveConfigToFile(); SystemConfig.Instance.LoadFromFile(); Close(); } private void Cancel_Click(object sender, RoutedEventArgs e) { Close(); } } }