using ProductionUiCordonel.Model; using System; using System.IO.Ports; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Threading; namespace ProductionUiCordonel { /// /// Interaktionslogik für MultiModeChild.xaml /// public partial class MultiModeChild : Window, IDisposable { public IMultiModeChildViewModel ViewModel; public Boolean UseDefaultPos { get; internal set; } = true; public event EventHandler PosChanged; public MultiModeChild(IMultiModeChildViewModel viewModel) { InitializeComponent(); ViewModel = viewModel; this.DataContext = ViewModel; if (ViewModel is PressureMultiModeViewModel pressureModel) { PressureControl.setViewModel(pressureModel); this.Left = 0; this.Top = 250; this.Height = SystemParameters.PrimaryScreenHeight - 300; this.Width = SystemParameters.PrimaryScreenWidth / 2; } if (ViewModel is PickingMultiModeViewModel pickingModel) { PickingControl.setViewModel(pickingModel); this.Left = SystemParameters.VirtualScreenLeft; this.Top = SystemParameters.VirtualScreenTop; this.Height = SystemParameters.VirtualScreenHeight; this.Width = SystemParameters.VirtualScreenWidth - SystemParameters.PrimaryScreenWidth; } if (ViewModel is MarriageMultiModeViewModel marriageModel) { MarriageControl.setViewModel(marriageModel); this.Left = SystemParameters.PrimaryScreenWidth / 2; this.Top = 250; this.Height = SystemParameters.PrimaryScreenHeight - 300; this.Width = SystemParameters.PrimaryScreenWidth / 2; } } internal void StartTextInputListener(String port, CancellationToken cancellation) { if (port == null) { return; } var task = new Task(() => { var a = new SerialPort(port); a.Open(); a.NewLine = "\r"; while (true) { if (cancellation.IsCancellationRequested) { break; } else { var resText = a.ReadLine(); this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => { ViewModel.InputText(resText); } )); } } }, cancellation); task.Start(); } internal void InputText(String text) { ViewModel.InputText(text); } private void BtnPresueFailed_Click(Object sender, RoutedEventArgs e) { } private void TxtPresurePcbId_TextChanged(Object sender, TextChangedEventArgs e) { } private void PressureControl_OnBarcodeInput(Object sender, Event.StringArgs e) { InputText(e.Content); } public void Dispose() { ViewModel.Dispose(); } private void Button_Click(Object sender, RoutedEventArgs e) { if (sender is Button btn) { btn.Content = $"POS L{this.Left},T{this.Top },H{this.Height},W{this.Width}"; } } private void Button_Click_1(Object sender, RoutedEventArgs e) { PosChanged?.Invoke(this, EventArgs.Empty); } } }