using ICSharpCode.AvalonEdit.Search; using MaterialDesignThemes.Wpf; using NPOI.SS.Formula.Functions; using Opc.Ua; using Prism.Commands; using Prism.Events; using Prism.Ioc; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Text; using System.Windows; using TeamAAS_VP.Controls; using TeamAAS_VP.Core; using TeamAAS_VP.Core.Cameras; using TeamAAS_VP.Enums; using TeamAAS_VP.Events; using TeamAAS_VP.Models; using TeamAAS_VP.Resources.Languages; using TeamAAS_VP.ViewModels.User; using TouchSocket.Core; using WPFLocalizeExtension.Engine; namespace TeamAAS_VP.ViewModels { public class SettingViewModel : BindableBase { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; bool isFirstLoad = true; #region 属性 private Management _management; public Management management { get { return _management; } set { SetProperty(ref _management, value); } } private DeviceConfiguration _DeviceConfig; /// /// 设备配置参数 /// public DeviceConfiguration DeviceConfig { get { return _DeviceConfig; } set { SetProperty(ref _DeviceConfig, value); } } private ModbusTcpMasterConfig _ModbusTcpMasterConfig = new ModbusTcpMasterConfig(); /// /// Modbus TCP 主站配置(MDC 电批) /// public ModbusTcpMasterConfig ModbusTcpMasterConfig { get { return _ModbusTcpMasterConfig; } set { SetProperty(ref _ModbusTcpMasterConfig, value); } } private RobotInfo _SelectRobot; /// /// 选中的机器人 /// public RobotInfo SelectRobot { get { return _SelectRobot; } set { SetProperty(ref _SelectRobot, value); if (value!=null && (value.RobotBrand == RobotBrand.XYZ_Platform || value.RobotBrand == RobotBrand.XYZU_Platform)) { RobotSelectedPlc = management.DeviceConfig.Plcs.FirstOrDefault(p=>p.Id==value.PLC); var root= management.RobotService.GetRobot(SelectRobot.Id); if (root != null) { ResultsValues.Clear(); var res= root.GetNodesValue(); for (int i = 0; i < res.Count; i++) { if (res[i].StatusCode.Code != 2150891520) { ResultsValues.Add(res[i].Value.ToString()); } else { break; } } } } } } private FeederInfo _SelectFeeder; /// /// 选中的Feeder /// public FeederInfo SelectFeeder { get { return _SelectFeeder; } set { SetProperty(ref _SelectFeeder, value); } } private PlcInfo _SelectPlc; public PlcInfo SelectPlc { get { return _SelectPlc; } set { SetProperty(ref _SelectPlc, value); } } private ObservableCollection _ResultsValues = new ObservableCollection(); public ObservableCollection ResultsValues { get => _ResultsValues; set => _ResultsValues = value; } private CameraInfo _SelectCamera; /// /// 选中的Camera /// public CameraInfo SelectCamera { get { return _SelectCamera; } set { SetProperty(ref _SelectCamera, value); } } private double _Title1; public double Title1 { get { return _Title1; } set { SetProperty(ref _Title1, value); } } private double _Title2; public double Title2 { get { return _Title2; } set { SetProperty(ref _Title2, value); } } private double _Title3; public double Title3 { get { return _Title3; } set { SetProperty(ref _Title3, value); } } private double _Title4; public double Title4 { get { return _Title4; } set { SetProperty(ref _Title4, value); } } private double _Body1; public double Body1 { get { return _Body1; } set { SetProperty(ref _Body1, value); } } private double _Body2; public double Body2 { get { return _Body2; } set { SetProperty(ref _Body2, value); } } private double _Body3; public double Body3 { get { return _Body3; } set { SetProperty(ref _Body3, value); } } private double _Body4; public double Body4 { get { return _Body4; } set { SetProperty(ref _Body4, value); } } private double _Captions1; public double Captions1 { get { return _Captions1; } set { SetProperty(ref _Captions1, value); } } private double _Captions2; public double Captions2 { get { return _Captions2; } set { SetProperty(ref _Captions2, value); } } private double _Captions3; public double Captions3 { get { return _Captions3; } set { SetProperty(ref _Captions3, value); } } private double _Captions4; public double Captions4 { get { return _Captions4; } set { SetProperty(ref _Captions4, value); } } private PlcInfo _RobotSelectedPlc; public PlcInfo RobotSelectedPlc { get { return _RobotSelectedPlc; } set { SetProperty(ref _RobotSelectedPlc, value); if (SelectRobot != null) { if (value != null) { SelectRobot.PLC=value.Id; } else { SelectRobot.PLC = Guid.Empty; } } } } #endregion #region 命令 public DelegateCommand LoadedCommand { get; set; } private DelegateCommand _AddRobotCommand; public DelegateCommand AddRobotCommand => _AddRobotCommand ?? (_AddRobotCommand = new DelegateCommand(ExecuteAddRobotCommand)); private DelegateCommand _RemoveCommand; public DelegateCommand RemoveCommand => _RemoveCommand ?? (_RemoveCommand = new DelegateCommand(ExecuteRemoveCommand)); private DelegateCommand _AddFeederCommand; public DelegateCommand AddFeederCommand => _AddFeederCommand ?? (_AddFeederCommand = new DelegateCommand(ExecuteAddFeederCommand)); private DelegateCommand _RemoveFeederCommand; public DelegateCommand RemoveFeederCommand => _RemoveFeederCommand ?? (_RemoveFeederCommand = new DelegateCommand(ExecuteRemoveFeederCommand)); private DelegateCommand _SelectLanguageCommand; public DelegateCommand SelectLanguageCommand => _SelectLanguageCommand ?? (_SelectLanguageCommand = new DelegateCommand(ExecuteSelectLanguageCommand)); private DelegateCommand _SaveRobotsCommand; public DelegateCommand SaveRobotsCommand => _SaveRobotsCommand ?? (_SaveRobotsCommand = new DelegateCommand(ExecuteSaveRobotsCommand)); private DelegateCommand _SaveFeedersCommand; public DelegateCommand SaveFeedersCommand => _SaveFeedersCommand ?? (_SaveFeedersCommand = new DelegateCommand(ExecuteSaveFeedersCommand)); private DelegateCommand _SaveCommunicateCommand; public DelegateCommand SaveCommunicateCommand => _SaveCommunicateCommand ?? (_SaveCommunicateCommand = new DelegateCommand(ExecuteSaveCommunicateCommand)); private DelegateCommand _AddCameraCommand; public DelegateCommand AddCameraCommand => _AddCameraCommand ?? (_AddCameraCommand = new DelegateCommand(ExecuteAddCameraCommand)); private DelegateCommand _EditCameraCommand; public DelegateCommand EditCameraCommand => _EditCameraCommand ?? (_EditCameraCommand = new DelegateCommand(ExecuteEditCameraCommand)); private DelegateCommand _RemoveCameraCommand; public DelegateCommand RemoveCameraCommand => _RemoveCameraCommand ?? (_RemoveCameraCommand = new DelegateCommand(ExecuteRemoveCameraCommand)); private DelegateCommand _SaveCamerasCommand; public DelegateCommand SaveCamerasCommand => _SaveCamerasCommand ?? (_SaveCamerasCommand = new DelegateCommand(ExecuteSaveCamerasCommand)); private DelegateCommand _AddPlcCommand; public DelegateCommand AddPlcCommand => _AddPlcCommand ?? (_AddPlcCommand = new DelegateCommand(ExecuteAddPlcCommand)); private DelegateCommand _RemovePlcCommand; public DelegateCommand RemovePlcCommand => _RemovePlcCommand ?? (_RemovePlcCommand = new DelegateCommand(ExecuteRemovePlcCommand)); private DelegateCommand _SavePlcsCommand; public DelegateCommand SavePlcsCommand => _SavePlcsCommand ?? (_SavePlcsCommand = new DelegateCommand(ExecuteSavePlcsCommand)); #endregion #region 事件 #endregion public SettingViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; management = _container.Resolve(); LoadedCommand = new DelegateCommand(OnLoad); //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); } #region 方法 #region 机器人 private void ExecuteAddRobotCommand() { _dialogService.ShowDialog("AddRobot", rst => { //对话框关闭之后的回调函数,可以在这解析结果。 ButtonResult result1 = rst.Result; if (result1 == ButtonResult.OK) { var param = rst.Parameters.GetValue("Robot"); DeviceConfig.Robots.Add(new RobotInfo() { Id = param.Id, RobotName = param.RobotName, ConnectType = param.ConnectType, RobotBrand = param.RobotBrand, IP = param.IP, Port = param.Port, Terminator = param.Terminator, }); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = $"{Lang.添加完成}", Duration = 1 }); } }); } void ExecuteRemoveCommand() { if (MessageBox.Show(Lang.是否移除机器人, $"AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { // 找到要删除的机器人 var robotToRemove = DeviceConfig.Robots.FirstOrDefault(r => r.Id == SelectRobot.Id); if (robotToRemove != null) { DeviceConfig.Robots.Remove(robotToRemove); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.移除完成, Duration = 1 }); } } } async void ExecuteSaveRobotsCommand() { var view = new ShowMessage($"AAS", Lang.是否保存机器人); //show the dialog var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool) { if (((bool)result)) { management.DeviceConfig.Robots = DeviceConfig.Robots; management.SaveRobotsDeviceConfig(); management.DeviceConfig.Robots = DeviceConfig.Robots; _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } } #endregion #region 相机 /// /// 保存所有相机 /// async void ExecuteSaveCamerasCommand() { var view = new ShowMessage($"AAS", Lang.是否保存相机配置); //show the dialog var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool) { if (((bool)result)) { management.DeviceConfig.Cameras = DeviceConfig.Cameras; management.SaveCamerasDeviceConfig(); management.DeviceConfig.Cameras = DeviceConfig.Cameras; _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } } /// /// 移除相机 /// void ExecuteRemoveCameraCommand() { if (MessageBox.Show(Lang.是否移除相机, $"AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { // 找到要删除的相机 var cameraToRemove = DeviceConfig.Cameras.FirstOrDefault(r => r.Id == SelectCamera.Id); if (cameraToRemove != null) { DeviceConfig.Cameras.Remove(cameraToRemove); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } } /// /// 编辑相机 /// void ExecuteEditCameraCommand() { if (SelectCamera == null) return; bool isSelectedCameraBrandSucced = false; CameraBrand cameraBrand = CameraBrand.HikRobot_MVS; IDialogParameters parameters1 = new DialogParameters(); parameters1.Add("CameraBrand", SelectCamera.CameraBrand); _dialogService.ShowDialog("SelectCameraBrand", parameters1, rst => { if (rst.Result == ButtonResult.OK) { isSelectedCameraBrandSucced = true; cameraBrand = rst.Parameters.GetValue("CameraBrand"); } else { return; } }); if (!isSelectedCameraBrandSucced) { return; } (bool isInstalled, string version) result = (false, ""); string softwarename = ""; switch (cameraBrand) { case CameraBrand.HikRobot_MVS: softwarename = "MVS"; result = MvCamera.CheckSoftwareInstalled(); break; case CameraBrand.Basler_Pylon: softwarename = "Pylon 7"; result = BaslerCamera.CheckSoftwareInstalled(); break; case CameraBrand.IRayple: softwarename = "MV Viewer"; result = AHuaCamera.CheckSoftwareInstalled(); break; case CameraBrand.Cognex: softwarename = "Cognex VisionPro"; result = CognexCamera.CheckSoftwareInstalled(); break; case CameraBrand.Galaxy: softwarename = "Galaxy Viewer"; result = GalaxyCamera.CheckSoftwareInstalled(); break; default: break; } if (!result.isInstalled) { if (string.IsNullOrEmpty(result.version)) { //未安装 MessageBox.Show(Lang.CameraSDKCheck_Message1.Replace("{name}", softwarename), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); } else { //版本较低 MessageBox.Show(Lang.CameraSDKCheck_Message2.Replace("{name}", softwarename).Replace("{version}", result.version).Replace("\\n", Environment.NewLine), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); } return; } IDialogParameters parameters = new DialogParameters(); parameters.Add("CameraBrand", cameraBrand); parameters.Add("Camera", SelectCamera.Copy()); _dialogService.ShowDialog("EditCamera", parameters, rst => { //对话框关闭之后的回调函数,可以在这解析结果。 ButtonResult result1 = rst.Result; if (result1 == ButtonResult.OK) { var param = rst.Parameters.GetValue("Camera"); SelectCamera.CameraName = param.CameraName; SelectCamera.SerialNumber = param.SerialNumber; SelectCamera.Model = param.Model; SelectCamera.ManufacturerName = param.ManufacturerName; SelectCamera.CameraType = param.CameraType; SelectCamera.CameraBrand = param.CameraBrand; SelectCamera.CameraIp = param.CameraIp; _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } }); } /// /// 增加相机 /// void ExecuteAddCameraCommand() { bool isSelectedCameraBrandSucced = false; CameraBrand cameraBrand = CameraBrand.HikRobot_MVS; _dialogService.ShowDialog("SelectCameraBrand", rst => { if (rst.Result == ButtonResult.OK) { isSelectedCameraBrandSucced = true; cameraBrand = rst.Parameters.GetValue("CameraBrand"); } else { return; } }); if (!isSelectedCameraBrandSucced) { return; } ; (bool isInstalled, string version) result = (false, ""); string softwarename = ""; switch (cameraBrand) { case CameraBrand.HikRobot_MVS: softwarename = "MVS"; result = MvCamera.CheckSoftwareInstalled(); break; case CameraBrand.Basler_Pylon: softwarename = "Pylon 7"; result = BaslerCamera.CheckSoftwareInstalled(); break; case CameraBrand.IRayple: softwarename = "MV Viewer"; result = AHuaCamera.CheckSoftwareInstalled(); break; case CameraBrand.Cognex: softwarename = "Cognex VisionPro"; result = CognexCamera.CheckSoftwareInstalled(); break; case CameraBrand.Galaxy: softwarename = "Galaxy Viewer"; result = GalaxyCamera.CheckSoftwareInstalled(); break; default: break; } if (!result.isInstalled) { if (string.IsNullOrEmpty(result.version)) { //未安装 MessageBox.Show(Lang.CameraSDKCheck_Message1.Replace("{name}", softwarename), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); } else { //版本较低 MessageBox.Show(Lang.CameraSDKCheck_Message2.Replace("{name}", softwarename).Replace("{version}", result.version).Replace("\\n", Environment.NewLine), "AAS", MessageBoxButton.OK, MessageBoxImage.Asterisk); } return; } IDialogParameters parameters = new DialogParameters(); parameters.Add("CameraBrand", cameraBrand); _dialogService.ShowDialog("AddCamera", parameters, rst => { //对话框关闭之后的回调函数,可以在这解析结果。 ButtonResult result1 = rst.Result; if (result1 == ButtonResult.OK) { var param = rst.Parameters.GetValue("Camera"); DeviceConfig.Cameras.Add(new CameraInfo() { Id = param.Id, CameraName = param.CameraName, SerialNumber = param.SerialNumber, Model = param.Model, ManufacturerName = param.ManufacturerName, CameraType = param.CameraType, CameraBrand = param.CameraBrand, CameraIp = param.CameraIp }); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } }); } #endregion #region Feeder void ExecuteAddFeederCommand() { _dialogService.ShowDialog("AddFeeder", rst => { //对话框关闭之后的回调函数,可以在这解析结果。 ButtonResult result1 = rst.Result; if (result1 == ButtonResult.OK) { var param = rst.Parameters.GetValue("Feeder"); DeviceConfig.Feeders.Add(new FeederInfo() { Id = param.Id, FeederName = param.FeederName, ConnectType = param.ConnectType, FeederBrand = param.FeederBrand, IP = param.IP, Port = param.Port }); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.添加完成, Duration = 1 }); } }); } void ExecuteRemoveFeederCommand() { if (MessageBox.Show(Lang.是否移除Feeder, " AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { // 找到要删除的机器人 var feederToRemove = DeviceConfig.Feeders.FirstOrDefault(r => r.Id == SelectFeeder.Id); if (feederToRemove != null) { DeviceConfig.Feeders.Remove(feederToRemove); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.移除完成, Duration = 1 }); } } } async void ExecuteSaveFeedersCommand() { var view = new ShowMessage($"AAS", Lang.是否保存Feeder); //show the dialog var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool) { if (((bool)result)) { management.DeviceConfig.Feeders = DeviceConfig.Feeders; management.SaveFeederDeviceConfig(); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } } #endregion #region PLC /// /// 保存PLC /// async void ExecuteSavePlcsCommand() { var view = new ShowMessage($"AAS", Lang.是否保存PLC); //show the dialog var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool) { if (((bool)result)) { management.DeviceConfig.Plcs = DeviceConfig.Plcs; management.SavePlcDeviceConfig(); management.DeviceConfig.Plcs = DeviceConfig.Plcs; _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } } /// /// 移除PLC /// void ExecuteRemovePlcCommand() { if (MessageBox.Show(Lang.是否移除PLC, $"AAS", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { // 找到要删除的plc var plcToRemove = DeviceConfig.Plcs.FirstOrDefault(r => r.Id == SelectPlc.Id); if (plcToRemove != null) { DeviceConfig.Plcs.Remove(plcToRemove); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.移除完成, Duration = 1 }); } } } /// /// 增加PLC /// void ExecuteAddPlcCommand() { _dialogService.ShowDialog("AddPlc", rst => { //对话框关闭之后的回调函数,可以在这解析结果。 ButtonResult result1 = rst.Result; if (result1 == ButtonResult.OK) { var param = rst.Parameters.GetValue("PLC"); DeviceConfig.Plcs.Add(new PlcInfo() { Id = param.Id, Name = param.Name, CommunicationType = param.CommunicationType, EndpointUrl = param.EndpointUrl, PlcIp = param.PlcIp, PlcPort = param.PlcPort, PlcForwardEnabled = param.PlcForwardEnabled, PlcPortDevice = param.PlcPortDevice, PlcQualityDevice = param.PlcQualityDevice, PlcDataStartDevice = param.PlcDataStartDevice, PlcReadyBitDevice = param.PlcReadyBitDevice, PlcOkBitDevice = param.PlcOkBitDevice, PlcNgBitDevice = param.PlcNgBitDevice, PlcReceiveBitDevice = param.PlcReceiveBitDevice, PlcHeartbeatDevice = param.PlcHeartbeatDevice, PlcHeartbeatIntervalMs = param.PlcHeartbeatIntervalMs, PlcBitTestDevice = param.PlcBitTestDevice, PlcMaxDataBytes = param.PlcMaxDataBytes, }); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.添加完成, Duration = 1 }); } }); } #endregion #region 通讯 async void ExecuteSaveCommunicateCommand(string parm) { if (parm == "TCPIP") { var view = new ShowMessage($"AAS", Lang.是否保存后台TCP通讯配置); //show the dialog var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool) { if (((bool)result)) { management.DeviceConfig.BgCommunicate = DeviceConfig.BgCommunicate; management.SaveBgTcpIpDeviceConfig(); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } } else if (parm == "ModbusTCP") { var view = new ShowMessage($"AAS", Lang.是否保存后台ModbusTCP通讯配置); //show the dialog var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool) { if (((bool)result)) { management.DeviceConfig.BgModbusCommunicate = DeviceConfig.BgModbusCommunicate; management.SaveBgModbusTcpDeviceConfig(); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } } else if (parm == "ModbusTCPMaster") { var view = new ShowMessage("AAS", Lang.是否保存ModbusTCP主站配置); var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool && (bool)result) { management.ModbusTcpMasterConfig = ModbusTcpMasterConfig.Clone(); management.SaveModbusTcpMasterDeviceConfig(); management.InitModbusTcpMaster(); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } else if (parm == "EIP") { var view = new ShowMessage("AAS", Lang.是否保存ModbusTCP主站配置); var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool && (bool)result) { management.DeviceConfig.BgEthernetIPCommunicate = DeviceConfig.BgEthernetIPCommunicate; management.SaveBgEthernetIPDeviceConfig(); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } else if (parm == "SFIS") { var view = new ShowMessage("AAS", "是否保存 SFIS 通讯配置"); var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && result is bool && (bool)result) { management.DeviceConfig.BgSfisCommunicate = DeviceConfig.BgSfisCommunicate; management.SaveBgSfisDeviceConfig(); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 }); } } else { return; } } #endregion #region 语言 void ExecuteSelectLanguageCommand(string language) { if (string.Equals(language, "ChineseSimplified")) { management.CurrentLanguage = Enums.Language.ChineseSimplified; management.SaveLanguageDeviceConfig(); var culture = new CultureInfo("zh-CN"); App.Current.Dispatcher.Thread.CurrentCulture = culture; App.Current.Dispatcher.Thread.CurrentUICulture = culture; LocalizeDictionary.Instance.Culture = culture; Lang.Culture = culture; Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Microsoft YaHei"); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 }); } else if (string.Equals(language, "ChineseTraditional")) { management.CurrentLanguage = Enums.Language.ChineseTraditional; management.SaveLanguageDeviceConfig(); var culture = new CultureInfo("zh-TW"); App.Current.Dispatcher.Thread.CurrentCulture = culture; App.Current.Dispatcher.Thread.CurrentUICulture = culture; LocalizeDictionary.Instance.Culture = culture; Lang.Culture = culture; Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Microsoft YaHei"); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 }); } else if (string.Equals(language, "English")) { management.CurrentLanguage = Enums.Language.English; management.SaveLanguageDeviceConfig(); var culture = new CultureInfo("en"); App.Current.Dispatcher.Thread.CurrentCulture = culture; App.Current.Dispatcher.Thread.CurrentUICulture = culture; LocalizeDictionary.Instance.Culture = culture; Lang.Culture = culture; Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Segoe UI"); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 }); } else if (string.Equals(language, "Japanese")) { management.CurrentLanguage = Enums.Language.Japanese; management.SaveLanguageDeviceConfig(); var culture = new CultureInfo("ja-JP"); App.Current.Dispatcher.Thread.CurrentCulture = culture; App.Current.Dispatcher.Thread.CurrentUICulture = culture; LocalizeDictionary.Instance.Culture = culture; Lang.Culture = culture; Application.Current.Resources["DefaultFont"] = new System.Windows.Media.FontFamily("Segoe UI"); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 0.5 }); } } #endregion private void OnLoad() { DeviceConfig = management.DeviceConfig.Clone(); ModbusTcpMasterConfig = management.ModbusTcpMasterConfig.Clone(); if (_container.Resolve().CurrentUser.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } if (isFirstLoad) { Title1 = (double)Application.Current.Resources["Font.Size.Title1"]; Title2 = (double)Application.Current.Resources["Font.Size.Title2"]; Title3 = (double)Application.Current.Resources["Font.Size.Title3"]; Title4 = (double)Application.Current.Resources["Font.Size.Title4"]; Body1 = (double)Application.Current.Resources["Font.Size.Body1"]; Body2 = (double)Application.Current.Resources["Font.Size.Body2"]; Body3 = (double)Application.Current.Resources["Font.Size.Body3"]; Body4 = (double)Application.Current.Resources["Font.Size.Body4"]; Captions1 = (double)Application.Current.Resources["Font.Size.Captions1"]; Captions2 = (double)Application.Current.Resources["Font.Size.Captions2"]; Captions3 = (double)Application.Current.Resources["Font.Size.Captions3"]; Captions4 = (double)Application.Current.Resources["Font.Size.Captions4"]; this.PropertyChanged += OnPropertyChanged; isFirstLoad = false; } } private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case "Title1": Application.Current.Resources["Font.Size.Title1"] = Title1; break; case "Title2": Application.Current.Resources["Font.Size.Title2"] = Title2; break; case "Title3": Application.Current.Resources["Font.Size.Title3"] = Title3; break; case "Title4": Application.Current.Resources["Font.Size.Title4"] = Title4; break; case "Body1": Application.Current.Resources["Font.Size.Body1"] = Body1; break; case "Body2": Application.Current.Resources["Font.Size.Body2"] = Body2; break; case "Body3": Application.Current.Resources["Font.Size.Body3"] = Body3; break; case "Body4": Application.Current.Resources["Font.Size.Body4"] = Body4; break; case "Captions1": Application.Current.Resources["Font.Size.Captions1"] = Captions1; break; case "Captions2": Application.Current.Resources["Font.Size.Captions2"] = Captions2; break; case "Captions3": Application.Current.Resources["Font.Size.Captions3"] = Captions3; break; case "Captions4": Application.Current.Resources["Font.Size.Captions4"] = Captions4; break; default: break; } } #endregion private bool _IsAllowEdit = false; public bool IsAllowEdit { get { return _IsAllowEdit; } set { SetProperty(ref _IsAllowEdit, value); } } private void LoginChange(Models.User user) { if (user.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } } }