diff --git a/CRSim.ScreenSimulator/Converters/TrainStateColorConverter.cs b/CRSim.ScreenSimulator/Converters/TrainStateColorConverter.cs index 702888d..40e3a17 100644 --- a/CRSim.ScreenSimulator/Converters/TrainStateColorConverter.cs +++ b/CRSim.ScreenSimulator/Converters/TrainStateColorConverter.cs @@ -19,6 +19,7 @@ namespace CRSim.ScreenSimulator.Converters public List WaitingColorList { get; set; } = new(); public SolidColorBrush ArrivedText { get; set; } = new(Colors.LightGreen); public SolidColorBrush ArrivingText { get; set; } = new(Colors.White); + public SolidColorBrush ArrivingLateText { get; set; } = new(Colors.Red); public SolidColorBrush WaitingColor { get; set; } = new(Colors.White); public SolidColorBrush CheckInColor { get; set; } = new(Colors.LightGreen); public SolidColorBrush StopCheckInColor { get; set; } = new(Colors.Red); @@ -34,8 +35,13 @@ namespace CRSim.ScreenSimulator.Converters // 到达模式或缺少关键数据 if (DisplayMode == "Arrive" || (values.Length > 1 && values[1] == null)) { - if (values[0] is DateTime arriveTime) - return now >= arriveTime ? ArrivedText : ArrivingText; + if (values[0] is DateTime arriveTime){ + if (values.Length > 1 && values[1] is TimeSpan state){ + if (state.TotalMinutes > 0) return ArrivingLateText; + return now >= arriveTime ? ArrivedText : ArrivingText; + } + return now >= arriveTime? ArrivedText : ArrivingText; + } return new SolidColorBrush(Colors.Transparent); } @@ -82,7 +88,19 @@ namespace CRSim.ScreenSimulator.Converters return StopCheckInColor; // 晚点 } } + public static string ToHourMinuteString(TimeSpan ts) + { + int totalHours = (int)ts.TotalHours; // 可以超过24 + int minutes = ts.Minutes; + if (totalHours > 0 && minutes > 0) + return $"{totalHours}小时{minutes}分钟"; + if (totalHours > 0) + return $"{totalHours}小时"; + if (minutes > 0) + return $"{minutes}分钟"; + return "0分钟"; // 特殊情况,完全为0 + } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => null; } } diff --git a/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs b/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs index a2bb742..9dd658b 100644 --- a/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs +++ b/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs @@ -13,6 +13,8 @@ namespace CRSim.ScreenSimulator.Converters public string DisplayMode { get; set; } = "Normal"; public string ArrivedText { get; set; } = "列车已到达"; public string ArrivingText { get; set; } = "正点"; + public string ArrivedLateText { get; set; } = "晚点{0}到达"; + public string ArrivingLateText { get; set; } = "预计晚点{0}"; public string WaitingText { get; set; } = "候车"; public string CheckInText { get; set; } = "正在检票"; public string StopCheckInText { get; set; } = "停止检票"; @@ -28,8 +30,22 @@ namespace CRSim.ScreenSimulator.Converters // 到达模式或关键数据缺失 if (DisplayMode == "Arrive" || (values.Length > 1 && values[1] == null)) { - if (values[0] is DateTime arriveTime) - return now >= arriveTime ? ArrivedText : ArrivingText; + + if (values[0] is DateTime arriveTime){ + if (values[2] is TimeSpan state){ + // arriveTime += TimeSpan.FromMinutes(state.TotalMinutes); + if (now >= arriveTime){ + if (state.TotalMinutes > 0) + return string.Format(ArrivedLateText, ToHourMinuteString(state)); + return ArrivedText; + }else{ + if (state.TotalMinutes > 0) + return string.Format(ArrivingLateText, ToHourMinuteString(state)); + return ArrivingText; + } + } + return now >= arriveTime? ArrivedText : ArrivingText; + } return string.Empty; }