C#实现点击按钮修改另一类中public Boolean布尔值的方法
实现方案
1. 主窗口新增全局配置实例与加载逻辑
你需要在程序启动时读取本地存储的配置文件,将配置存入全局实例,所有状态修改都基于这个实例操作,避免每次新建实例丢失历史状态。
// 主窗口类中声明全局配置实例 private Data.Settings _currentSettings; // 主窗口构造函数中补充配置加载逻辑 public MainWindow() { InitializeComponent(); LoadSettings(); // 初始化按钮状态和已存储的RepeatTrack值同步 Loop.Content = _currentSettings.RepeatTrack ? "\uE8EE" : "\uE8ED"; } // 新增配置加载方法 private void LoadSettings() { var settingsPath = $"{Environment.CurrentDirectory}\\utils\\Settings.json"; if (File.Exists(settingsPath)) { var json = File.ReadAllText(settingsPath); _currentSettings = JsonConvert.DeserializeObject<Data.Settings>(json); } else { // 配置文件不存在时初始化默认值 _currentSettings = new Data.Settings() { SongVolume = "100", RepeatTrack = false }; } }
注意:如果编译报错找不到File类,需要在文件顶部引入using System.IO;
2. 修改按钮点击事件逻辑
直接修改全局实例的RepeatTrack属性,切换完成后调用保存方法落盘即可:
private void Loop_Click(object sender, RoutedEventArgs e) { // 直接切换布尔值,无需额外判断按钮内容 _currentSettings.RepeatTrack = !_currentSettings.RepeatTrack; // 更新按钮显示状态 Loop.Content = _currentSettings.RepeatTrack ? "\uE8EE" : "\uE8ED"; // 保存修改后的配置到本地文件 SaveSettings(); }
3. 修复原有SaveSettings方法的已知问题
原有方法存在两个错误:
- 每次新建Settings实例,会丢失全局实例里存储的RepeatTrack值
- 属性名不匹配:Settings类定义的音量属性为
SongVolume,原代码中写的Volume为不存在的属性,会触发编译错误
修正后的代码:
public void SaveSettings() { var settingsPath = $"{Environment.CurrentDirectory}\\utils\\Settings.json"; // 直接更新全局实例的音量值,不要新建实例 _currentSettings.SongVolume = VolumeSlider.Value.ToString(); string formattedjson = JsonConvert.SerializeObject(_currentSettings, Newtonsoft.Json.Formatting.Indented); File.WriteAllText(settingsPath, formattedjson); }
内容的提问来源于stack exchange,提问作者Gloozzy
相关产品推荐
相关产品推荐

