调整流水线算子参数区 滑块控件的大小
This commit is contained in:
@@ -16,8 +16,8 @@
|
||||
Background="Transparent"
|
||||
BorderBrush="#FFD5DFE5"
|
||||
BorderThickness="1"
|
||||
Padding="10"
|
||||
Margin="0,0,0,10">
|
||||
Padding="8"
|
||||
Margin="0,0,0,8">
|
||||
<StackPanel>
|
||||
<TextBlock x:Name="txtProcessorName"
|
||||
FontSize="14"
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
<!-- 参数列表 -->
|
||||
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel x:Name="pnlParameters" Margin="5" />
|
||||
<StackPanel x:Name="pnlParameters" Margin="2" />
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
</UserControl>
|
||||
|
||||
@@ -143,12 +143,15 @@ public partial class ProcessorParameterControl : UserControl
|
||||
var textBox = new TextBox
|
||||
{
|
||||
Text = param.Value.ToString(),
|
||||
Width = 100,
|
||||
HorizontalAlignment = HorizontalAlignment.Left
|
||||
Width = 56,
|
||||
MinWidth = 56,
|
||||
HorizontalContentAlignment = HorizontalAlignment.Center,
|
||||
VerticalContentAlignment = VerticalAlignment.Center
|
||||
};
|
||||
|
||||
if (param.MinValue != null && param.MaxValue != null)
|
||||
{
|
||||
var rangeGrid = CreateRangeEditorContainer();
|
||||
var slider = new Slider
|
||||
{
|
||||
Minimum = Convert.ToDouble(param.MinValue),
|
||||
@@ -156,7 +159,8 @@ public partial class ProcessorParameterControl : UserControl
|
||||
Value = Convert.ToDouble(param.Value),
|
||||
TickFrequency = 1,
|
||||
IsSnapToTickEnabled = true,
|
||||
Margin = new Thickness(0, 0, 0, 5)
|
||||
MinWidth = 120,
|
||||
VerticalAlignment = VerticalAlignment.Center
|
||||
};
|
||||
|
||||
slider.ValueChanged += (s, e) =>
|
||||
@@ -181,7 +185,11 @@ public partial class ProcessorParameterControl : UserControl
|
||||
}
|
||||
};
|
||||
|
||||
panel.Children.Add(slider);
|
||||
Grid.SetColumn(slider, 0);
|
||||
Grid.SetColumn(textBox, 2);
|
||||
rangeGrid.Children.Add(slider);
|
||||
rangeGrid.Children.Add(textBox);
|
||||
panel.Children.Add(rangeGrid);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -193,9 +201,9 @@ public partial class ProcessorParameterControl : UserControl
|
||||
OnParameterChanged();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
panel.Children.Add(textBox);
|
||||
panel.Children.Add(textBox);
|
||||
}
|
||||
|
||||
return panel;
|
||||
}
|
||||
@@ -211,19 +219,23 @@ public partial class ProcessorParameterControl : UserControl
|
||||
var textBox = new TextBox
|
||||
{
|
||||
Text = Convert.ToDouble(param.Value).ToString("F2"),
|
||||
Width = 100,
|
||||
HorizontalAlignment = HorizontalAlignment.Left
|
||||
Width = 56,
|
||||
MinWidth = 56,
|
||||
HorizontalContentAlignment = HorizontalAlignment.Center,
|
||||
VerticalContentAlignment = VerticalAlignment.Center
|
||||
};
|
||||
|
||||
if (param.MinValue != null && param.MaxValue != null)
|
||||
{
|
||||
var rangeGrid = CreateRangeEditorContainer();
|
||||
var slider = new Slider
|
||||
{
|
||||
Minimum = Convert.ToDouble(param.MinValue),
|
||||
Maximum = Convert.ToDouble(param.MaxValue),
|
||||
Value = Convert.ToDouble(param.Value),
|
||||
TickFrequency = 0.1,
|
||||
Margin = new Thickness(0, 0, 0, 5)
|
||||
MinWidth = 120,
|
||||
VerticalAlignment = VerticalAlignment.Center
|
||||
};
|
||||
|
||||
slider.ValueChanged += (s, e) =>
|
||||
@@ -248,7 +260,11 @@ public partial class ProcessorParameterControl : UserControl
|
||||
}
|
||||
};
|
||||
|
||||
panel.Children.Add(slider);
|
||||
Grid.SetColumn(slider, 0);
|
||||
Grid.SetColumn(textBox, 2);
|
||||
rangeGrid.Children.Add(slider);
|
||||
rangeGrid.Children.Add(textBox);
|
||||
panel.Children.Add(rangeGrid);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -260,9 +276,9 @@ public partial class ProcessorParameterControl : UserControl
|
||||
OnParameterChanged();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
panel.Children.Add(textBox);
|
||||
panel.Children.Add(textBox);
|
||||
}
|
||||
|
||||
return panel;
|
||||
}
|
||||
@@ -302,8 +318,8 @@ public partial class ProcessorParameterControl : UserControl
|
||||
var comboBox = new ComboBox
|
||||
{
|
||||
Margin = new Thickness(0, 5, 0, 0),
|
||||
Width = 200,
|
||||
HorizontalAlignment = HorizontalAlignment.Left
|
||||
MinWidth = 160,
|
||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||
};
|
||||
|
||||
if (param.Options != null)
|
||||
@@ -344,8 +360,8 @@ public partial class ProcessorParameterControl : UserControl
|
||||
{
|
||||
Text = param.Value?.ToString() ?? "",
|
||||
Margin = new Thickness(0, 5, 0, 0),
|
||||
Width = 200,
|
||||
HorizontalAlignment = HorizontalAlignment.Left
|
||||
MinWidth = 160,
|
||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||
};
|
||||
|
||||
textBox.TextChanged += (s, e) =>
|
||||
@@ -374,4 +390,16 @@ public partial class ProcessorParameterControl : UserControl
|
||||
pnlParameters.Children.Clear();
|
||||
UpdateNoProcessorText();
|
||||
}
|
||||
}
|
||||
|
||||
private static Grid CreateRangeEditorContainer()
|
||||
{
|
||||
var grid = new Grid
|
||||
{
|
||||
Margin = new Thickness(0, 0, 0, 4)
|
||||
};
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(6) });
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
|
||||
return grid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,15 @@ namespace XplorePlane.ViewModels
|
||||
public string ParameterType { get; }
|
||||
public bool HasOptions => Options is { Length: > 0 };
|
||||
public bool IsBool => ParameterType == "bool";
|
||||
public bool IsTextInput => !IsBool && !HasOptions;
|
||||
public bool IsNumeric => ParameterType is "int" or "double";
|
||||
public bool HasRange => IsNumeric && MinValue != null && MaxValue != null;
|
||||
public bool IsSliderInput => HasRange;
|
||||
public bool IsTextInput => !IsBool && !HasOptions && !IsSliderInput;
|
||||
|
||||
public double SliderMinimum => TryConvertToDouble(MinValue, out var minValue) ? minValue : 0d;
|
||||
public double SliderMaximum => TryConvertToDouble(MaxValue, out var maxValue) ? maxValue : 100d;
|
||||
public double SliderTickFrequency => ResolveTickFrequency();
|
||||
public bool IsIntegerSlider => ParameterType == "int";
|
||||
|
||||
public bool IsValueValid
|
||||
{
|
||||
@@ -60,10 +68,46 @@ namespace XplorePlane.ViewModels
|
||||
RaisePropertyChanged(nameof(Value));
|
||||
RaisePropertyChanged(nameof(BoolValue));
|
||||
RaisePropertyChanged(nameof(SelectedOption));
|
||||
RaisePropertyChanged(nameof(SliderValue));
|
||||
RaisePropertyChanged(nameof(DisplayValueText));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public double SliderValue
|
||||
{
|
||||
get => TryConvertToDouble(_value, out var sliderValue) ? sliderValue : SliderMinimum;
|
||||
set
|
||||
{
|
||||
if (!IsSliderInput)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Value = ParameterType == "int"
|
||||
? (object)Convert.ToInt32(Math.Round(value, MidpointRounding.AwayFromZero), CultureInfo.InvariantCulture)
|
||||
: Math.Round(value, ResolveDecimalPlaces(), MidpointRounding.AwayFromZero);
|
||||
}
|
||||
}
|
||||
|
||||
public string DisplayValueText
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ParameterType == "int" && TryConvertToInt(_value, out var intValue))
|
||||
{
|
||||
return intValue.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
if (ParameterType == "double" && TryConvertToDouble(_value, out var doubleValue))
|
||||
{
|
||||
return doubleValue.ToString($"F{ResolveDecimalPlaces()}", CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
return Convert.ToString(_value, CultureInfo.InvariantCulture) ?? string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public bool BoolValue
|
||||
{
|
||||
get => ParameterType == "bool" && TryConvertToBool(_value, out var boolValue) && boolValue;
|
||||
@@ -154,6 +198,58 @@ namespace XplorePlane.ViewModels
|
||||
return true;
|
||||
}
|
||||
|
||||
private double ResolveTickFrequency()
|
||||
{
|
||||
if (!HasRange)
|
||||
{
|
||||
return 1d;
|
||||
}
|
||||
|
||||
if (ParameterType == "int")
|
||||
{
|
||||
return 1d;
|
||||
}
|
||||
|
||||
double range = SliderMaximum - SliderMinimum;
|
||||
if (range <= 1d)
|
||||
{
|
||||
return 0.01d;
|
||||
}
|
||||
|
||||
if (range <= 10d)
|
||||
{
|
||||
return 0.1d;
|
||||
}
|
||||
|
||||
return 1d;
|
||||
}
|
||||
|
||||
private int ResolveDecimalPlaces()
|
||||
{
|
||||
if (ParameterType == "int")
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
double tick = SliderTickFrequency;
|
||||
if (tick >= 1d)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (tick >= 0.1d)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (tick >= 0.01d)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
private static string NormalizeNumericText(string value)
|
||||
{
|
||||
return value.Trim().TrimEnd('、', ',', ',', '。', '.', ';', ';', ':', ':');
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace XplorePlane.ViewModels
|
||||
{
|
||||
public class MainViewModel : BindableBase
|
||||
{
|
||||
private const double CncEditorHostWidth = 402d;
|
||||
private const double CncEditorHostWidth = 452d;
|
||||
|
||||
private readonly ILoggerService _logger;
|
||||
private readonly IContainerProvider _containerProvider;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
xmlns:views="clr-namespace:XplorePlane.Views"
|
||||
xmlns:vm="clr-namespace:XplorePlane.ViewModels.Cnc"
|
||||
d:DesignHeight="760"
|
||||
d:DesignWidth="402"
|
||||
d:DesignWidth="452"
|
||||
prism:ViewModelLocator.AutoWireViewModel="True"
|
||||
mc:Ignorable="d">
|
||||
|
||||
@@ -114,8 +114,8 @@
|
||||
</UserControl.Resources>
|
||||
|
||||
<Border
|
||||
Width="402"
|
||||
MinWidth="402"
|
||||
Width="452"
|
||||
MinWidth="452"
|
||||
HorizontalAlignment="Left"
|
||||
Background="{StaticResource PanelBg}"
|
||||
BorderBrush="{StaticResource PanelBorder}"
|
||||
@@ -123,7 +123,7 @@
|
||||
CornerRadius="4">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="200" />
|
||||
<ColumnDefinition Width="180" />
|
||||
<ColumnDefinition Width="1" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<Setter Property="FontWeight" Value="Bold" />
|
||||
<Setter Property="Foreground" Value="#1c1c1b" />
|
||||
<Setter Property="BorderBrush" Value="#cdcbcb" />
|
||||
<Setter Property="Padding" Value="4,6,4,4" />
|
||||
<Setter Property="Padding" Value="3,4,3,3" />
|
||||
</Style>
|
||||
</UserControl.Resources>
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
<!-- 右侧:算子选择 + 参数配置 -->
|
||||
<Border Grid.Column="3" Style="{StaticResource PanelBorderStyle}">
|
||||
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="10,8,10,10">
|
||||
<StackPanel Margin="8,6,8,8">
|
||||
|
||||
<GroupBox Margin="0,0,0,8" Header="选择算子">
|
||||
<ComboBox
|
||||
@@ -204,4 +204,4 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
</UserControl>
|
||||
|
||||
@@ -317,9 +317,53 @@
|
||||
Text="{Binding DisplayName}"
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
|
||||
<Grid Grid.Column="1">
|
||||
<Grid.Style>
|
||||
<Style TargetType="Grid">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsSliderInput}" Value="True">
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Grid.Style>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="58" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Slider
|
||||
Grid.Column="0"
|
||||
Margin="0,0,8,0"
|
||||
VerticalAlignment="Center"
|
||||
IsSnapToTickEnabled="{Binding IsIntegerSlider}"
|
||||
LargeChange="{Binding SliderTickFrequency}"
|
||||
Maximum="{Binding SliderMaximum}"
|
||||
Minimum="{Binding SliderMinimum}"
|
||||
SmallChange="{Binding SliderTickFrequency}"
|
||||
TickFrequency="{Binding SliderTickFrequency}"
|
||||
Value="{Binding SliderValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
|
||||
<Border
|
||||
Grid.Column="1"
|
||||
Padding="2,2"
|
||||
Background="#F8F8F8"
|
||||
BorderBrush="#CDCBCB"
|
||||
BorderThickness="1"
|
||||
CornerRadius="2">
|
||||
<TextBlock
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
FontFamily="{StaticResource UiFont}"
|
||||
FontSize="11"
|
||||
Text="{Binding DisplayValueText}" />
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<TextBox
|
||||
Grid.Column="1"
|
||||
Padding="4,2"
|
||||
Padding="2,2"
|
||||
BorderBrush="#CDCBCB"
|
||||
BorderThickness="1"
|
||||
FontFamily="{StaticResource UiFont}"
|
||||
|
||||
Reference in New Issue
Block a user