在WPF事件处理程序中操作对象数据的技术求助
嘿,我来帮你搞定这个D&D战斗追踪器的回合递增功能!首先咱们得先解决一个关键问题:你现在的CurrentSession是在构造函数里定义的局部变量,所以btnNextTurn_Button_Click方法根本访问不到它。接下来咱们一步步修改:
第一步:完善Session类,添加获取当前回合的属性
你的Session类目前只有递增回合的方法,但外部没法直接拿到当前的回合数,所以咱们加个只读属性来暴露它,顺便调整下方法名符合C#的命名规范:
namespace CombatTracker { public class Session { private int turn = 1; // 暴露当前回合数给外部 public int CurrentTurn => turn; // 把方法名改成PascalCase,符合C#编码习惯 public int NextTurn() { return turn++; } } }
第二步:调整MainWindow类,让Session实例全局可访问
把CurrentSession从构造函数的局部变量改成窗口类的私有成员,这样所有按钮事件都能调用它:
namespace CombatTracker { public partial class MainWindow : Window { // 改成类的私有成员,让所有方法都能访问 private Session _currentSession; public MainWindow() { InitializeComponent(); _currentSession = new Session(); // 初始化时就显示初始回合数(比如第1回合) UpdateTurnDisplay(); } private void btnNewSession_Click(object sender, RoutedEventArgs e) { MainWindow newSession = new MainWindow(); newSession.Show(); Close(); } private void btnNextTurn_Button_Click(object sender, RoutedEventArgs e) { // 调用Session的方法递增回合 _currentSession.NextTurn(); // 更新UI显示最新回合数 UpdateTurnDisplay(); } // 封装更新UI的方法,避免重复写代码 private void UpdateTurnDisplay() { // 这里假设你有一个名为txtTurnCount的TextBlock用来显示回合数 // 如果你的控件名字不一样,记得改成你实际用的控件名 txtTurnCount.Text = $"当前回合: {_currentSession.CurrentTurn}"; } } }
第三步:确保XAML里有对应的显示控件
最后别忘了在你的MainWindow.xaml里添加一个用来显示回合数的控件,比如:
<!-- 显示回合数的TextBlock --> <TextBlock x:Name="txtTurnCount" Margin="15" FontSize="18" FontWeight="Bold"/> <!-- 下一回合按钮 --> <Button x:Name="btnNextTurn" Content="下一回合" Click="btnNextTurn_Button_Click" Margin="15" Padding="10 5"/>
这样点击“下一回合”按钮时,不仅会递增Session里的回合变量,还会实时更新UI上显示的回合数啦!
内容的提问来源于stack exchange,提问作者Charlie Lyons
相关产品推荐
相关产品推荐

