mirror of
https://github.com/denglihong2007/CRSim
synced 2026-08-04 16:26:24 +08:00
feat: 添加了淄博站出站口看板
This commit is contained in:
BIN
CRSim.ScreenSimulator/Assets/Zibo/ExitScreen.png
Normal file
BIN
CRSim.ScreenSimulator/Assets/Zibo/ExitScreen.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -152,6 +152,7 @@
|
||||
<Resource Include="Assets\Zibo\PrimaryScreen.png" />
|
||||
<Resource Include="Assets\Zibo\SecondaryScreen.png" />
|
||||
<Resource Include="Assets\Zibo\TicketCheckScreen.png" />
|
||||
<Resource Include="Assets\Zibo\ExitScreen.png" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -16,9 +16,12 @@ namespace CRSim.ScreenSimulator.Converters
|
||||
/*
|
||||
Normal: 标准显示。
|
||||
Alternating_Row_Colors: 候车状态隔行异色显示(第4个参数控制行号)。
|
||||
Arrive: 到达屏显示
|
||||
*/
|
||||
|
||||
public List<SolidColorBrush> WaitingColorList { get; set; } = [];
|
||||
public SolidColorBrush ArrivedText { get; set; } = new(Colors.LightGreen);
|
||||
public SolidColorBrush ArrivingText { get; set; } = new(Colors.White);
|
||||
public SolidColorBrush WaitingColor { get; set; } = new(Colors.White);
|
||||
public SolidColorBrush CheckInColor { get; set; } = new(Colors.LightGreen);
|
||||
public SolidColorBrush StopCheckInColor { get; set; } = new(Colors.Red);
|
||||
@@ -27,6 +30,14 @@ namespace CRSim.ScreenSimulator.Converters
|
||||
var serviceProvider = (IServiceProvider)Application.Current.Resources["ServiceProvider"];
|
||||
_timeService = serviceProvider.GetRequiredService<ITimeService>();
|
||||
_settings = serviceProvider.GetRequiredService<ISettingsService>().GetSettings();
|
||||
if (DisplayMode == "Arrive" || ( values.Length > 1 && values[1] == null))
|
||||
{
|
||||
if (values[0] is DateTime arriveTime)
|
||||
{
|
||||
return _timeService.GetDateTimeNow() >= arriveTime ? ArrivedText : ArrivingText;
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
if (values[0] != null && values[1] == null)
|
||||
{
|
||||
return WaitingColor;
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace CRSim.ScreenSimulator.Converters
|
||||
{
|
||||
if (values[0] is DateTime arriveTime)
|
||||
{
|
||||
return _timeService.GetDateTimeNow() > arriveTime ? ArrivedText : ArrivingText;
|
||||
return _timeService.GetDateTimeNow() >= arriveTime ? ArrivedText : ArrivingText;
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
@@ -242,6 +242,17 @@
|
||||
"Location"
|
||||
]
|
||||
},
|
||||
{
|
||||
"UniqueId": "Zibo.ExitScreen",
|
||||
"Title": "淄博站出站口看板",
|
||||
"Region": "淄博",
|
||||
"Author": "wxl0430",
|
||||
"Type": "出站口屏",
|
||||
"Parameters": [
|
||||
"Station",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
{
|
||||
"UniqueId": "Jinanxi.SmallScreen",
|
||||
"Title": "济南西站小屏看板",
|
||||
|
||||
@@ -142,7 +142,14 @@ namespace CRSim.ScreenSimulator.ViewModels
|
||||
|
||||
}
|
||||
}
|
||||
TrainInfo = [.. TrainInfo.OrderBy(x => x.DepartureTime??x.ArrivalTime)];
|
||||
if(StationType == StationType.Arrival)
|
||||
{
|
||||
TrainInfo = [.. TrainInfo.OrderBy(x => x.ArrivalTime??x.DepartureTime)];
|
||||
}
|
||||
else
|
||||
{
|
||||
TrainInfo = [.. TrainInfo.OrderBy(x => x.DepartureTime??x.ArrivalTime)];
|
||||
}
|
||||
RefreshData(null, null);
|
||||
DataLoaded.SetResult(true);
|
||||
}
|
||||
|
||||
48
CRSim.ScreenSimulator/ViewModels/Zibo/ExitScreenViewModel.cs
Normal file
48
CRSim.ScreenSimulator/ViewModels/Zibo/ExitScreenViewModel.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using CRSim.Core.Services;
|
||||
using CRSim.Core.Models;
|
||||
using CRSim.ScreenSimulator.Models;
|
||||
using System.Windows;
|
||||
namespace CRSim.ScreenSimulator.ViewModels.Zibo
|
||||
{
|
||||
public class ExitScreenViewModel : ScreenViewModel
|
||||
{
|
||||
public ExitScreenViewModel(ITimeService timeService, ISettingsService settingsService)
|
||||
: base(timeService, settingsService)
|
||||
{
|
||||
Text = $"温馨提示:请接站的旅客在出站口外耐心等候";
|
||||
ItemsPerPage = 6;
|
||||
ScreenCount = 2;
|
||||
StationType = StationType.Arrival;
|
||||
}
|
||||
public override void RefreshDisplay(object? sender, EventArgs? e)
|
||||
{
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
int pageCount = (int)Math.Ceiling((double)TrainInfo.Count / (ItemsPerPage * ScreenCount.Value));
|
||||
ScreenA.Clear();
|
||||
ScreenB.Clear();
|
||||
int startIndex = CurrentPageIndex * ItemsPerPage * ScreenCount.Value;
|
||||
var ItemsToShow = TrainInfo.Skip(startIndex).Take(ItemsPerPage * ScreenCount.Value).ToList();
|
||||
var leftItems = ItemsToShow.Where((item, index) => index % 2 == 0).ToList();
|
||||
var rightItems = ItemsToShow.Where((item, index) => index % 2 == 1).ToList();
|
||||
while (leftItems.Count < ItemsPerPage)
|
||||
{
|
||||
leftItems.Add(new TrainInfo());
|
||||
}
|
||||
while (rightItems.Count < ItemsPerPage)
|
||||
{
|
||||
rightItems.Add(new TrainInfo());
|
||||
}
|
||||
foreach (var item in leftItems)
|
||||
{
|
||||
ScreenA.Add(item);
|
||||
}
|
||||
foreach (var item in rightItems)
|
||||
{
|
||||
ScreenB.Add(item);
|
||||
}
|
||||
CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
238
CRSim.ScreenSimulator/Views/Zibo/ExitScreenView.xaml
Normal file
238
CRSim.ScreenSimulator/Views/Zibo/ExitScreenView.xaml
Normal file
@@ -0,0 +1,238 @@
|
||||
<views:BaseScreenView x:Class="CRSim.ScreenSimulator.Views.Zibo.ExitScreenView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:CRSim.ScreenSimulator.Views.Zibo"
|
||||
mc:Ignorable="d"
|
||||
xmlns:views="clr-namespace:CRSim.ScreenSimulator.Views"
|
||||
xmlns:converters="clr-namespace:CRSim.ScreenSimulator.Converters"
|
||||
xmlns:converters1="clr-namespace:CRSim.Shared.Converters;assembly=CRSim.Shared"
|
||||
Background="#000000"
|
||||
FontFamily="微软雅黑" FontSize="16">
|
||||
<views:BaseScreenView.Resources>
|
||||
<converters1:ListToStringConverter x:Key="ListToStringConverter" Separator=" - " />
|
||||
<converters1:EmptyToVisibilityConverter x:Key="EmptyToVisibilityConverter" />
|
||||
<converters1:DateTimeToStringConverter x:Key="DateTimeToStringConverter" Format="HH:mm" />
|
||||
<converters1:DateTimeToStringConverter x:Key="DateTimeToStringTimeConverter" Format="yyyy-MM-dd HH:mm:ss" />
|
||||
<converters:TrainStateConverter x:Key="TrainStateConverter" ArrivedText="列车已到达" ArrivingText="正点到达" DisplayMode="Arrive"/>
|
||||
<converters:TrainStateColorConverter x:Key="TrainStateColorConverter" DisplayMode="Arrive"/>
|
||||
<Style TargetType="DataGridColumnHeader">
|
||||
<Setter Property="Padding" Value="0"/>
|
||||
<Setter Property="Margin" Value="0"/>
|
||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
</Style>
|
||||
<Style x:Key="CommonTextBlockStyle" TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="White"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="TextAlignment" Value="Center"/>
|
||||
<Setter Property="FontWeight" Value="Bold"/>
|
||||
</Style>
|
||||
<Style x:Key="CommonRowStyle" TargetType="DataGridRow">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=AlternationIndex}" Value="1">
|
||||
<Setter Property="Background" Value="#0c1c56"/>
|
||||
<Setter Property="Foreground" Value="#ffffff"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=AlternationIndex}" Value="0">
|
||||
<Setter Property="Background" Value="#002df6"/>
|
||||
<Setter Property="Foreground" Value="#ffffff"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
<Style x:Key="CommonHeaderStyle" TargetType="TextBlock">
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||
<Setter Property="TextAlignment" Value="Center"/>
|
||||
<Setter Property="FontWeight" Value="Bold"/>
|
||||
<Setter Property="Background">
|
||||
<Setter.Value>
|
||||
<SolidColorBrush Color="#191a2f"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Setter Property="Foreground">
|
||||
<Setter.Value>
|
||||
<SolidColorBrush Color="#f8f5a5"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</views:BaseScreenView.Resources>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<views:BaseDataGrid ItemsSource="{Binding ScreenA}" RowHeight="22" RowStyle="{StaticResource CommonRowStyle}" AlternationCount="2" >
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Binding="{Binding TrainNumber}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="车次" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}"/>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
|
||||
<DataGridTextColumn Binding="{Binding Origin}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="始发站" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}"/>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
|
||||
<DataGridTextColumn Binding="{Binding Terminal}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="终到站" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}"/>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
|
||||
<DataGridTextColumn Binding="{Binding ArrivalTime, Converter={StaticResource DateTimeToStringConverter}}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="到点" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}">
|
||||
<Setter Property="Visibility" Value="{Binding TrainNumber,Converter={StaticResource EmptyToVisibilityConverter}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn MinWidth="130">
|
||||
<DataGridTextColumn.Binding>
|
||||
<MultiBinding Mode="OneWay" Converter="{StaticResource TrainStateConverter}">
|
||||
<Binding Path="ArrivalTime" />
|
||||
<Binding Path="DepartureTime" />
|
||||
<Binding Path="State" />
|
||||
</MultiBinding>
|
||||
</DataGridTextColumn.Binding>
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="状态" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}">
|
||||
<Setter Property="Visibility" Value="{Binding TrainNumber,Converter={StaticResource EmptyToVisibilityConverter}}"/>
|
||||
<Setter Property="Foreground">
|
||||
<Setter.Value>
|
||||
<MultiBinding Converter="{StaticResource TrainStateColorConverter}">
|
||||
<Binding Path="ArrivalTime" />
|
||||
</MultiBinding>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
</DataGrid.Columns>
|
||||
</views:BaseDataGrid>
|
||||
<views:BaseDataGrid ItemsSource="{Binding ScreenB}" RowHeight="22" RowStyle="{StaticResource CommonRowStyle}" AlternationCount="2" >
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Binding="{Binding TrainNumber}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="车次" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}"/>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
|
||||
<DataGridTextColumn Binding="{Binding Origin}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="始发站" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}"/>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
|
||||
<DataGridTextColumn Binding="{Binding Terminal}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="终到站" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}"/>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
|
||||
<DataGridTextColumn Binding="{Binding ArrivalTime, Converter={StaticResource DateTimeToStringConverter}}" MinWidth="100">
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="到点" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}">
|
||||
<Setter Property="Visibility" Value="{Binding TrainNumber,Converter={StaticResource EmptyToVisibilityConverter}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn MinWidth="130">
|
||||
<DataGridTextColumn.Binding>
|
||||
<MultiBinding Mode="OneWay" Converter="{StaticResource TrainStateConverter}">
|
||||
<Binding Path="ArrivalTime" />
|
||||
<Binding Path="DepartureTime" />
|
||||
<Binding Path="State" />
|
||||
</MultiBinding>
|
||||
</DataGridTextColumn.Binding>
|
||||
<DataGridTextColumn.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Width="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=ActualWidth}">
|
||||
<TextBlock Text="状态" Style="{StaticResource CommonHeaderStyle}" FontSize="20"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTextColumn.HeaderTemplate>
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock" BasedOn="{StaticResource CommonTextBlockStyle}">
|
||||
<Setter Property="Visibility" Value="{Binding TrainNumber,Converter={StaticResource EmptyToVisibilityConverter}}"/>
|
||||
<Setter Property="Foreground">
|
||||
<Setter.Value>
|
||||
<MultiBinding Converter="{StaticResource TrainStateColorConverter}">
|
||||
<Binding Path="ArrivalTime" />
|
||||
</MultiBinding>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
</DataGrid.Columns>
|
||||
</views:BaseDataGrid>
|
||||
</StackPanel>
|
||||
<Grid Background="#012cf7" HorizontalAlignment="Stretch" Height="36">
|
||||
<TextBlock Text="{Binding Text}" Foreground="#ffffff" FontWeight="Bold" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</views:BaseScreenView>
|
||||
18
CRSim.ScreenSimulator/Views/Zibo/ExitScreenView.xaml.cs
Normal file
18
CRSim.ScreenSimulator/Views/Zibo/ExitScreenView.xaml.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using CRSim.ScreenSimulator.ViewModels.Zibo;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace CRSim.ScreenSimulator.Views.Zibo
|
||||
{
|
||||
public partial class ExitScreenView : BaseScreenView
|
||||
{
|
||||
public ExitScreenViewModel ViewModel { get; }
|
||||
public ExitScreenView(ExitScreenViewModel viewModel)
|
||||
{
|
||||
InitializeComponent();
|
||||
ViewModel = viewModel;
|
||||
DataContext = viewModel;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user