大佬,能不能增加分钟的设定,感谢

随便聊聊 · 122 次浏览
陈九111 创建于 2023-09-15 17:56

大佬,我在子程序增加了分钟的变量(如下图1),并设置分钟(如下图2),并利用AI帮我把代码更新为如下,但运行后提示分钟变量不存在(如下图3),您能帮我下怎么解决吗

图1:

图2:

图3:

代码:

// 定义 TimingFunction 类  
public class TimingFunction  
{  
    // 定义 TextBlock 控件  
    public TextBlock TextBoxControl;  
    // 定义倒计时分钟数  
    public int CountdownMinutes;  
    // 定义倒计时秒数  
    public int CountdownSeconds;  
    // 定义计时器  
    public DispatcherTimer dispatcherTimer;  
      
    // 构造函数,传入 Window 对象和数据上下文  
    public TimingFunction(Window win, IDictionary<string, object> dataContext)  
    {  
        // 获取上下文对象  
        var context = dataContext["context"] as IActionContext;  
        // 获取倒计时的分钟数和秒数  
        CountdownMinutes = Convert.ToInt32(context.GetVarValue("CountDownMinutes"));  
        CountdownSeconds = Convert.ToInt32(context.GetVarValue("CountDownSeconds"));  
        // 获取提示文本控件  
        TextBoxControl = (System.Windows.Controls.TextBlock)win.FindName("提示文本") as TextBlock;  
        // 获取窗口信息  
        var TextINT = context.GetVarValue("WindowInformation").ToString();  
        // 设置提示文本内容,格式为“分钟:秒”  
        TextBoxControl.Text = TextINT.Contains("{0}") ? string.Format(TextINT, CountdownMinutes.ToString() + ":" + CountdownSeconds.ToString()) : TextINT;  
        // 创建计时器对象  
        dispatcherTimer = new DispatcherTimer();  
        // 计时器事件处理函数  
        dispatcherTimer.Tick += (s, e) =>  
        {  
            // 如果秒数大于 0,递减秒数  
            if (CountdownSeconds > 0)  
            {  
                CountdownSeconds--;  
            }  
            // 如果秒数为 0 且分钟数大于 0,递减分钟数并将秒数重置为 59  
            else if (CountdownMinutes > 0)  
            {  
                CountdownMinutes--;  
                CountdownSeconds = 59; // 重置秒数为 59 当分钟递减时  
            }  
            // 更新上下文中的分钟数和秒数  
            context.SetVarValue("CountDownMinutes", CountdownMinutes);  
            context.SetVarValue("CountDownSeconds", CountdownSeconds);  
            // 获取窗口信息  
            TextINT = context.GetVarValue("WindowInformation").ToString();  
            // 更新提示文本内容,格式为“分钟:秒”  
            TextBoxControl.Text = TextINT.Contains("{0}") ? string.Format(TextINT, CountdownMinutes.ToString() + ":" + CountdownSeconds.ToString()) : TextINT;  
            // 当倒计时到达 00:00 时关闭窗口  
            if (CountdownMinutes == 0 && CountdownSeconds == 0) { win.Close(); };   
        };  
        // 设置计时器间隔为 1 秒(1000 毫秒)  
        dispatcherTimer.Interval = new TimeSpan(0, 0, 1);   
        // 启动计时器  
        dispatcherTimer.Start();  
        // 当窗口关闭时停止计时器  
        win.Closed += (s, e) => { dispatcherTimer.Stop(); };   
    }  
}  
  
// 窗口加载完成事件处理方法,传入 Window 对象、数据上下文和窗口上下文对象  
public static void OnWindowLoaded(Window win, IDictionary<string, object> dataContext, ICustomWindowContext winContext)  
{  
    // 创建 TimingFunction 对象,传入 Window 对象和数据上下文  
    new TimingFunction(win, dataContext);  
}

陈九111 最后更新于 2023/9/15

瞑空凌 2023-09-15 18:01 :

你可以直接把这个步骤从子程序里拿出来,然后步骤多线程循环更新窗口信息这个变量,通过外部倒计时更改里面文本内容来实现

瞑空凌 2023-09-15 18:05 :

想了想,直接在子程序里更新变量似乎更方便些,不过原理都一样我那倒计时是时刻读取那个变量信息,变量更改,窗口里文本也会变

瞑空凌 2023-09-15 22:11 :

你大小写不一致

陈九111 2023-09-16 20:36 :

成功了,感谢大佬

回复内容
暂无回复
回复主贴