/// <summary> /// Sets the order parameters. /// </summary> protected virtual void SetOrderParameters() { void setNumericProperties(bool setMargin = false) { var listboxItems = modList.GetLogicalChildren().Cast <ListBoxItem>(); foreach (var item in listboxItems) { var grid = item.GetLogicalChildren().OfType <Grid>().FirstOrDefault(); if (grid != null) { var orderCtrl = grid.GetLogicalChildren().OfType <MinMaxNumericUpDown>().FirstOrDefault(p => p.Name == OrderName); if (orderCtrl != null) { orderCtrl.Minimum = 1; orderCtrl.Maximum = ViewModel.MaxOrder; if (setMargin) { var left = 0; var right = 0; if (orderCtrl.Bounds.Width > 100) { right = 10; } else { left = 6; } orderCtrl.Margin = new Avalonia.Thickness(left, 0, right, 0); } } } } } ViewModel.ModReordered += (mod, instant) => { setNumericProperties(instant); modList.Focus(); FocusOrderTextBoxAsync(mod).ConfigureAwait(true); }; this.WhenAnyValue(v => v.ViewModel.MaxOrder).Subscribe(max => { if (Dispatcher.UIThread.CheckAccess()) { setNumericProperties(); } else { Dispatcher.UIThread.InvokeAsync(() => setNumericProperties()); } }).DisposeWith(Disposables); modList.LayoutUpdated += (sender, args) => { setNumericProperties(true); }; }
/// <summary> /// Sets the UI parameters. /// </summary> protected virtual void SetUIParameters() { var performingUISet = false; async Task setUIProperties() { while (performingUISet) { await Task.Delay(25); } performingUISet = true; await Dispatcher.UIThread.SafeInvokeAsync(() => { var listboxItems = modList.GetLogicalChildren().Cast <ListBoxItem>(); foreach (var item in listboxItems) { var grid = item.GetLogicalChildren().OfType <Grid>().FirstOrDefault(); if (grid != null) { for (int i = 0; i < grid.ColumnDefinitions.Count; i++) { var col = grid.ColumnDefinitions[i]; var width = header.ColumnDefinitions[i].ActualWidth; if (width >= 0 && !double.IsInfinity(width) && !double.IsNaN(width)) { col.Width = new GridLength(header.ColumnDefinitions[i].ActualWidth); } } var orderCtrl = grid.GetLogicalChildren().OfType <MinMaxNumericUpDown>().FirstOrDefault(p => p.Name == OrderName); if (orderCtrl != null) { orderCtrl.Minimum = 1; orderCtrl.Maximum = ViewModel.MaxOrder; } } } }); performingUISet = false; } ViewModel.ModReordered += (mod, instant) => { setUIProperties().ConfigureAwait(false); modList.Focus(); FocusListBoxItemAsync(mod, instant).ConfigureAwait(true); }; this.WhenAnyValue(v => v.ViewModel.MaxOrder).Subscribe(max => { setUIProperties().ConfigureAwait(false); }).DisposeWith(Disposables); modList.LayoutUpdated += (sender, args) => { setUIProperties().ConfigureAwait(false); }; }
/// <summary> /// Sets the order parameters. /// </summary> protected virtual void SetOrderParameters() { void setNumericProperties(bool setMargin = false) { var listboxItems = modList.GetLogicalChildren().Cast <ListBoxItem>(); foreach (var item in listboxItems) { var grid = item.GetLogicalChildren().OfType <Grid>().FirstOrDefault(); if (grid != null) { var orderCtrl = grid.GetLogicalChildren().OfType <MinMaxNumericUpDown>().FirstOrDefault(p => p.Name == OrderName); if (orderCtrl != null) { orderCtrl.Minimum = 1; orderCtrl.Maximum = ViewModel.MaxOrder; if (setMargin) { var left = 0; var right = 0; if (orderCtrl.Bounds.Width > 100) { right = 10; } else { left = 6; } orderCtrl.Margin = new Avalonia.Thickness(left, 0, right, 0); } } } } } ViewModel.ModReordered += (args) => { setNumericProperties(); modList.Focus(); FocusOrderTextboxAsync(args).ConfigureAwait(true); }; this.WhenAnyValue(v => v.ViewModel.MaxOrder).Subscribe(max => { setNumericProperties(); }).DisposeWith(Disposables); var previousHashState = false; this.WhenAnyValue(v => v.ViewModel.CanExportModHashReport).Subscribe(s => { if (s != previousHashState) { cachedMenuItems = new Dictionary <object, List <MenuItem> >(); } previousHashState = s; }).DisposeWith(Disposables); modList.LayoutUpdated += (sender, args) => { setNumericProperties(true); }; }