From a60a7b4405f245d9837b8e9caf45e0969a36281c Mon Sep 17 00:00:00 2001 From: wxl0430 <141288415+wxl0430@users.noreply.github.com> Date: Thu, 10 Apr 2025 20:30:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=B7=84=E5=8D=9A?= =?UTF-8?q?=E7=AB=99=E7=AB=99=E5=8F=B0=E7=9C=8B=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Converters/LocationToStringConverter.cs | 41 ++++++-- .../Stations/Zibo/PlatformScreenViewModel.cs | 64 ++++++++++++ .../Stations/Zibo/PlatformScreenView.xaml | 97 ++++++++++++++++++ .../Stations/Zibo/PlatformScreenView.xaml.cs | 38 +++++++ CRSim/App.xaml.cs | 2 + .../StyleImages/Zibo/PlatformScreen.png | Bin 0 -> 5757 bytes CRSim/CRSim.csproj | 1 + CRSim/Models/StylesInfoData.json | 37 ++++--- 8 files changed, 258 insertions(+), 22 deletions(-) create mode 100644 CRSim.ScreenSimulator/ViewModels/Windows/Stations/Zibo/PlatformScreenViewModel.cs create mode 100644 CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml create mode 100644 CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml.cs create mode 100644 CRSim/Assets/StyleImages/Zibo/PlatformScreen.png diff --git a/CRSim.ScreenSimulator/Converters/LocationToStringConverter.cs b/CRSim.ScreenSimulator/Converters/LocationToStringConverter.cs index f1e6b75..e174223 100644 --- a/CRSim.ScreenSimulator/Converters/LocationToStringConverter.cs +++ b/CRSim.ScreenSimulator/Converters/LocationToStringConverter.cs @@ -5,23 +5,44 @@ namespace CRSim.ScreenSimulator.Converters { public class LocationToStringConverter : IMultiValueConverter { + public string DisplayMode { get; set; } = "normal"; object IMultiValueConverter.Convert(object[] values, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { - if (values[0] is int Length&& values[1] is int Location) + if (values[0] is int Length && values[1] is int Location) { - if (Location > Length) + if (DisplayMode == "less") { - return $"当前无车,1-{Length}车向后。"; + if (Location > Length) + { + return $"当前无车厢,1~{Length}车厢向前。"; + } + if (Location == Length) + { + return $"当前{Length}车厢,1车厢向前。"; + } + if (Location == 1) + { + return $"当前1车厢,{Length}车厢向后。"; + } + return $"1车厢向前,{Length}车厢向后。"; } - if (Location == Length) + if (DisplayMode == "normal") { - return $"当前{Length}车,1-{Length-1}车向后。"; + if (Location > Length) + { + return $"当前无车,1-{Length}车向后。"; + } + if (Location == Length) + { + return $"当前{Length}车,1-{Length-1}车向后。"; + } + if (Location == 1) + { + return $"当前1车,2-{Length}车向前。"; + } + return $"当前{Location}车,1-{Location - 1}车向前,{Location + 1}-{Length}车向后。"; } - if (Location == 1) - { - return $"当前1车,2-{Length}车向前。"; - } - return $"当前{Location}车,1-{Location - 1}车向前,{Location + 1}-{Length}车向后。"; + return string.Empty; } return string.Empty; } diff --git a/CRSim.ScreenSimulator/ViewModels/Windows/Stations/Zibo/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Windows/Stations/Zibo/PlatformScreenViewModel.cs new file mode 100644 index 0000000..e58f7d4 --- /dev/null +++ b/CRSim.ScreenSimulator/ViewModels/Windows/Stations/Zibo/PlatformScreenViewModel.cs @@ -0,0 +1,64 @@ +using CRSim.Core.Services; +using CRSim.ScreenSimulator.Models; +using System.Collections.ObjectModel; +using System.Windows; +namespace CRSim.ScreenSimulator.ViewModels.Zibo +{ + public class PlatformScreenViewModel : ScreenViewModel + { + private ITimeService _timeService; + public ObservableCollection Screen { get; set; } = []; + public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) + : base(timeService, settingsService) + { + + // Text = $"请站在白色安全线以内排队候车"; //为什么 无效 + _timeService = timeService; + timeService.RefreshSecondsElapsed += RefreshDisplay; + Initialize(); + } + private async void Initialize() + { + await WaitForDataLoadAsync(); + Text = ThisPlatform; + RefreshDisplay(null,null); + } + private void RefreshDisplay(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); + if (Screen.Count == 1) return; + Screen.RemoveAt(0); + }); + } + public override void RefreshData(object? sender, EventArgs e) + { + if (CurrentPageIndex == 0) + { + List itemsToRemove = []; + foreach (TrainInfo trainInfo in TrainInfo) + { + if (trainInfo.DepartureTime == null) + { + if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) + { + itemsToRemove.Add(trainInfo); + } + } + else + { + if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) + { + itemsToRemove.Add(trainInfo); + } + } + } + foreach (var item in itemsToRemove) + { + TrainInfo.Remove(item); + } + } + } + } +} diff --git a/CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml b/CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml new file mode 100644 index 0000000..0f017bc --- /dev/null +++ b/CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml.cs b/CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml.cs new file mode 100644 index 0000000..82619b7 --- /dev/null +++ b/CRSim.ScreenSimulator/Views/Windows/Stations/Zibo/PlatformScreenView.xaml.cs @@ -0,0 +1,38 @@ +using CRSim.ScreenSimulator.ViewModels.Zibo; +using System.Windows; +using System.Windows.Input; +using System.Windows.Media; + +namespace CRSim.ScreenSimulator.Views.Zibo +{ + /// + /// SecondaryScreen.xaml 的交互逻辑 + /// + public partial class PlatformScreenView : Window + { + public PlatformScreenViewModel ViewModel { get; } + public PlatformScreenView(PlatformScreenViewModel viewModel) + { + + InitializeComponent(); + RenderOptions.SetEdgeMode(this, EdgeMode.Aliased); + ViewModel = viewModel; + DataContext = viewModel; + } + private void Window_MouseDown(object sender, MouseButtonEventArgs e) + { + if (e.ChangedButton == MouseButton.Left) + { + DragMove(); + } + } + + private void Window_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + { + Close(); + } + } + } +} diff --git a/CRSim/App.xaml.cs b/CRSim/App.xaml.cs index 73ba7f0..6c37647 100644 --- a/CRSim/App.xaml.cs +++ b/CRSim/App.xaml.cs @@ -61,6 +61,8 @@ services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/CRSim/Assets/StyleImages/Zibo/PlatformScreen.png b/CRSim/Assets/StyleImages/Zibo/PlatformScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..0601a72c29f8d0a83af77849a11d5e90de99f2b9 GIT binary patch literal 5757 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 + diff --git a/CRSim/Models/StylesInfoData.json b/CRSim/Models/StylesInfoData.json index 66a3738..84fc035 100644 --- a/CRSim/Models/StylesInfoData.json +++ b/CRSim/Models/StylesInfoData.json @@ -144,6 +144,31 @@ "Station" ] }, + { + "UniqueId": "Zibo TicketCheckScreen", + "Title": "淄博站检票口看板", + "Station": "Zibo", + "StyleName": "TicketCheckScreenView", + "ImagePath": "Assets/StyleImages/Zibo/TicketCheckScreen.png", + "Parameters": [ + "Station", + "TicketCheck", + "Text" + ] + }, + { + "UniqueId": "Zibo PlatformScreen", + "Title": "淄博站站台看板", + "Station": "Zibo", + "StyleName": "PlatformScreenView", + "ImagePath": "Assets/StyleImages/Zibo/PlatformScreen.png", + "Parameters": [ + "Station", + "Platform", + "Location", + "Text" + ] + }, { "UniqueId": "Jinanxi SmallScreen", "Title": "济南西站小屏看板", @@ -175,17 +200,5 @@ "Station", "Text" ] - }, - { - "UniqueId": "Zibo TicketCheckScreen", - "Title": "淄博站检票口看板", - "Station": "Zibo", - "StyleName": "TicketCheckScreenView", - "ImagePath": "Assets/StyleImages/Zibo/TicketCheckScreen.png", - "Parameters": [ - "Station", - "TicketCheck", - "Text" - ] } ] \ No newline at end of file