优化界面显示:射线源模块紧凑设计,探测器优化布局和大小,优化界面提示和提示。

This commit is contained in:
QI Mingxuan
2026-05-06 17:47:38 +08:00
parent 8de455f0bb
commit cdd1f043e7
12 changed files with 530 additions and 109 deletions
+137 -2
View File
@@ -1,4 +1,4 @@
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
@@ -19,7 +19,7 @@ namespace XP.Hardware.MotionControl.Resources {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@@ -60,6 +60,132 @@ namespace XP.Hardware.MotionControl.Resources {
}
}
/// <summary>
/// 查找类似 轴位置 的本地化字符串。
/// </summary>
internal static string AC_AxisPositions {
get {
return ResourceManager.GetString("AC_AxisPositions", resourceCulture);
}
}
/// <summary>
/// 查找类似 校准计算值 的本地化字符串。
/// </summary>
internal static string AC_CalibrationValue {
get {
return ResourceManager.GetString("AC_CalibrationValue", resourceCulture);
}
}
/// <summary>
/// 查找类似 探测器摆动 的本地化字符串。
/// </summary>
internal static string AC_DetectorSwing {
get {
return ResourceManager.GetString("AC_DetectorSwing", resourceCulture);
}
}
/// <summary>
/// 查找类似 探测器 Z 的本地化字符串。
/// </summary>
internal static string AC_DetectorZ {
get {
return ResourceManager.GetString("AC_DetectorZ", resourceCulture);
}
}
/// <summary>
/// 查找类似 实体操作摇杆使能 的本地化字符串。
/// </summary>
internal static string AC_Enable {
get {
return ResourceManager.GetString("AC_Enable", resourceCulture);
}
}
/// <summary>
/// 查找类似 夹具旋转 的本地化字符串。
/// </summary>
internal static string AC_FixtureRotation {
get {
return ResourceManager.GetString("AC_FixtureRotation", resourceCulture);
}
}
/// <summary>
/// 查找类似 恢复前一位置 的本地化字符串。
/// </summary>
internal static string AC_Restore {
get {
return ResourceManager.GetString("AC_Restore", resourceCulture);
}
}
/// <summary>
/// 查找类似 安全高度 的本地化字符串。
/// </summary>
internal static string AC_SafetyHeight {
get {
return ResourceManager.GetString("AC_SafetyHeight", resourceCulture);
}
}
/// <summary>
/// 查找类似 安全参数 的本地化字符串。
/// </summary>
internal static string AC_SafetyParams {
get {
return ResourceManager.GetString("AC_SafetyParams", resourceCulture);
}
}
/// <summary>
/// 查找类似 保存当前位置 的本地化字符串。
/// </summary>
internal static string AC_Save {
get {
return ResourceManager.GetString("AC_Save", resourceCulture);
}
}
/// <summary>
/// 查找类似 射线源 Z 的本地化字符串。
/// </summary>
internal static string AC_SourceZ {
get {
return ResourceManager.GetString("AC_SourceZ", resourceCulture);
}
}
/// <summary>
/// 查找类似 载物台旋转 的本地化字符串。
/// </summary>
internal static string AC_StageRotation {
get {
return ResourceManager.GetString("AC_StageRotation", resourceCulture);
}
}
/// <summary>
/// 查找类似 载物台 X 的本地化字符串。
/// </summary>
internal static string AC_StageX {
get {
return ResourceManager.GetString("AC_StageX", resourceCulture);
}
}
/// <summary>
/// 查找类似 载物台 Y 的本地化字符串。
/// </summary>
internal static string AC_StageY {
get {
return ResourceManager.GetString("AC_StageY", resourceCulture);
}
}
/// <summary>
/// 查找类似 Actual 的本地化字符串。
/// </summary>
@@ -327,6 +453,15 @@ namespace XP.Hardware.MotionControl.Resources {
}
}
/// <summary>
/// 查找类似 运动控制 的本地化字符串。
/// </summary>
internal static string MC_MotionCtrl {
get {
return ResourceManager.GetString("MC_MotionCtrl", resourceCulture);
}
}
/// <summary>
/// 查找类似 Move 的本地化字符串。
/// </summary>
@@ -258,30 +258,29 @@ SourceZ → {3:F2}mm
DetectorZ → {4:F2}mm
Confirm to filll move matrix?</value>
</data>
<!-- AxisControlView localization resources -->
<data name="AC_AxisPositions" xml:space="preserve">
<value>Axis Positions</value>
</data>
<data name="AC_StageX" xml:space="preserve">
<value>Stage X</value>
<value>X mm</value>
</data>
<data name="AC_StageY" xml:space="preserve">
<value>Stage Y</value>
<value>Y mm</value>
</data>
<data name="AC_SourceZ" xml:space="preserve">
<value>Source Z</value>
<value>SZ mm</value>
</data>
<data name="AC_DetectorZ" xml:space="preserve">
<value>Detector Z</value>
<value>DZ mm</value>
</data>
<data name="AC_DetectorSwing" xml:space="preserve">
<value>Detector Swing</value>
<value>DT' °</value>
</data>
<data name="AC_StageRotation" xml:space="preserve">
<value>Stage Rotation</value>
<value>R' °</value>
</data>
<data name="AC_FixtureRotation" xml:space="preserve">
<value>Fixture Rotation</value>
<value>FR' °</value>
</data>
<data name="AC_SafetyParams" xml:space="preserve">
<value>Safety Parameters</value>
@@ -301,4 +300,7 @@ Confirm to filll move matrix?</value>
<data name="AC_Restore" xml:space="preserve">
<value>Restore Position</value>
</data>
<data name="MC_MotionCtrl" xml:space="preserve">
<value>Motion Control</value>
</data>
</root>
@@ -301,7 +301,6 @@ DetectorZ → {4:F2}mm
确认填入信息? | Confirm to filll move matrix?</value>
<comment>几何反算确认提示 | Geometry inverse confirmation message</comment>
</data>
<!-- AxisControlView 多语言资源 | AxisControlView localization resources -->
<data name="AC_AxisPositions" xml:space="preserve">
<value>轴位置</value>
<comment>轴位置分组标题 | Axis positions group title</comment>
@@ -358,4 +357,8 @@ DetectorZ → {4:F2}mm
<value>恢复前一位置</value>
<comment>恢复按钮文本 | Restore button text</comment>
</data>
<data name="MC_MotionCtrl" xml:space="preserve">
<value>运动控制</value>
<comment>header</comment>
</data>
</root>
@@ -258,30 +258,29 @@ SourceZ → {3:F2}mm
DetectorZ → {4:F2}mm
确认填入目标值信息?</value>
</data>
<!-- AxisControlView 多语言资源 | AxisControlView localization resources -->
<data name="AC_AxisPositions" xml:space="preserve">
<value>轴位置</value>
</data>
<data name="AC_StageX" xml:space="preserve">
<value>载物台 X</value>
<value>X mm</value>
</data>
<data name="AC_StageY" xml:space="preserve">
<value>载物台 Y</value>
<value>Y mm</value>
</data>
<data name="AC_SourceZ" xml:space="preserve">
<value>射线源 Z</value>
<value>SZ mm</value>
</data>
<data name="AC_DetectorZ" xml:space="preserve">
<value>探测器 Z</value>
<value>DZ mm</value>
</data>
<data name="AC_DetectorSwing" xml:space="preserve">
<value>探测器摆动</value>
<value>DT' °</value>
</data>
<data name="AC_StageRotation" xml:space="preserve">
<value>载物台旋转</value>
<value>R' °</value>
</data>
<data name="AC_FixtureRotation" xml:space="preserve">
<value>夹具旋转</value>
<value>FR' °</value>
</data>
<data name="AC_SafetyParams" xml:space="preserve">
<value>安全参数</value>
@@ -301,4 +300,7 @@ DetectorZ → {4:F2}mm
<data name="AC_Restore" xml:space="preserve">
<value>恢复前一位置</value>
</data>
<data name="MC_MotionCtrl" xml:space="preserve">
<value>运动控制</value>
</data>
</root>
@@ -258,30 +258,29 @@ SourceZ → {3:F2}mm
DetectorZ → {4:F2}mm
確填入目標值資料?</value>
</data>
<!-- AxisControlView 多語言資源 | AxisControlView localization resources -->
<data name="AC_AxisPositions" xml:space="preserve">
<value>軸位置</value>
</data>
<data name="AC_StageX" xml:space="preserve">
<value>載物台 X</value>
<value>X mm</value>
</data>
<data name="AC_StageY" xml:space="preserve">
<value>載物台 Y</value>
<value>Y mm</value>
</data>
<data name="AC_SourceZ" xml:space="preserve">
<value>射線源 Z</value>
<value>SZ mm</value>
</data>
<data name="AC_DetectorZ" xml:space="preserve">
<value>探測器 Z</value>
<value>DZ mm</value>
</data>
<data name="AC_DetectorSwing" xml:space="preserve">
<value>探測器擺動</value>
<value>DT' °</value>
</data>
<data name="AC_StageRotation" xml:space="preserve">
<value>載物台旋轉</value>
<value>R' °</value>
</data>
<data name="AC_FixtureRotation" xml:space="preserve">
<value>夾具旋轉</value>
<value>FR' °</value>
</data>
<data name="AC_SafetyParams" xml:space="preserve">
<value>安全參數</value>
@@ -301,4 +300,7 @@ DetectorZ → {4:F2}mm
<data name="AC_Restore" xml:space="preserve">
<value>恢復前一位置</value>
</data>
<data name="MC_MotionCtrl" xml:space="preserve">
<value>運動控制</value>
</data>
</root>
@@ -12,24 +12,43 @@
MinWidth="350"
HorizontalAlignment="Stretch" Background="White">
<Grid Margin="6">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- ========== 上部:左(轴位置)+ 右(摇杆)========== -->
<!-- 标题栏 -->
<Grid Grid.Row="0">
<Border
Grid.Row="0"
Background="#F0F0F0"
BorderBrush="#DDDDDD"
BorderThickness="0,0,0,1">
<TextBlock
Margin="8,4"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontWeight="SemiBold"
Foreground="#333333"
Text="{loc:Localization MC_MotionCtrl}" />
</Border>
</Grid>
<!-- ========== 上部:左(轴位置)+ 右(摇杆)========== -->
<Grid Grid.Row="1" Margin="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- ===== 左侧:轴位置输入框 ===== -->
<Grid Grid.Column="0" Margin="0,0,4,0" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="60"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
@@ -41,26 +60,26 @@
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{loc:Localization AC_StageX}" FontSize="11" VerticalAlignment="Center" Margin="0,1,4,1"/>
<telerik:RadNumericUpDown Grid.Row="0" Grid.Column="1" x:Name="NumStageX" Value="{Binding StageXPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumStageX_GotFocus" LostFocus="NumStageX_LostFocus" KeyDown="NumStageX_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{loc:Localization AC_StageX}" FontSize="11" VerticalAlignment="Center" Margin="3,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="0" Grid.Column="0" x:Name="NumStageX" Value="{Binding StageXPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumStageX_GotFocus" LostFocus="NumStageX_LostFocus" KeyDown="NumStageX_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="{loc:Localization AC_StageY}" FontSize="11" VerticalAlignment="Center" Margin="0,1,4,1"/>
<telerik:RadNumericUpDown Grid.Row="1" Grid.Column="1" x:Name="NumStageY" Value="{Binding StageYPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumStageY_GotFocus" LostFocus="NumStageY_LostFocus" KeyDown="NumStageY_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{loc:Localization AC_StageY}" FontSize="11" VerticalAlignment="Center" Margin="3,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="1" Grid.Column="0" x:Name="NumStageY" Value="{Binding StageYPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumStageY_GotFocus" LostFocus="NumStageY_LostFocus" KeyDown="NumStageY_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="{loc:Localization AC_SourceZ}" FontSize="11" VerticalAlignment="Center" Margin="0,1,4,1"/>
<telerik:RadNumericUpDown Grid.Row="2" Grid.Column="1" x:Name="NumSourceZ" Value="{Binding SourceZPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumSourceZ_GotFocus" LostFocus="NumSourceZ_LostFocus" KeyDown="NumSourceZ_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{loc:Localization AC_SourceZ}" FontSize="11" VerticalAlignment="Center" Margin="3,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="2" Grid.Column="0" x:Name="NumSourceZ" Value="{Binding SourceZPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumSourceZ_GotFocus" LostFocus="NumSourceZ_LostFocus" KeyDown="NumSourceZ_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="{loc:Localization AC_DetectorZ}" FontSize="11" VerticalAlignment="Center" Margin="0,1,4,1"/>
<telerik:RadNumericUpDown Grid.Row="3" Grid.Column="1" x:Name="NumDetectorZ" Value="{Binding DetectorZPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumDetectorZ_GotFocus" LostFocus="NumDetectorZ_LostFocus" KeyDown="NumDetectorZ_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="3" Grid.Column="1" Text="{loc:Localization AC_DetectorZ}" FontSize="11" VerticalAlignment="Center" Margin="3,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="3" Grid.Column="0" x:Name="NumDetectorZ" Value="{Binding DetectorZPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumDetectorZ_GotFocus" LostFocus="NumDetectorZ_LostFocus" KeyDown="NumDetectorZ_KeyDown" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="{loc:Localization AC_DetectorSwing}" FontSize="11" VerticalAlignment="Center" Margin="0,1,4,1" Visibility="{Binding DetectorSwingVisibility}"/>
<telerik:RadNumericUpDown Grid.Row="4" Grid.Column="1" x:Name="NumDetSwing" Value="{Binding DetectorSwingAngle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumDetSwing_GotFocus" LostFocus="NumDetSwing_LostFocus" KeyDown="NumDetSwing_KeyDown" Visibility="{Binding DetectorSwingVisibility}" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="4" Grid.Column="1" Text="{loc:Localization AC_DetectorSwing}" FontSize="11" VerticalAlignment="Center" Margin="3,1,1,1" Visibility="{Binding DetectorSwingVisibility}"/>
<telerik:RadNumericUpDown Grid.Row="4" Grid.Column="0" x:Name="NumDetSwing" Value="{Binding DetectorSwingAngle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumDetSwing_GotFocus" LostFocus="NumDetSwing_LostFocus" KeyDown="NumDetSwing_KeyDown" Visibility="{Binding DetectorSwingVisibility}" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="5" Grid.Column="0" Text="{loc:Localization AC_StageRotation}" FontSize="11" VerticalAlignment="Center" Margin="0,1,4,1" Visibility="{Binding StageRotationVisibility}"/>
<telerik:RadNumericUpDown Grid.Row="5" Grid.Column="1" x:Name="NumStageRot" Value="{Binding StageRotationAngle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumStageRot_GotFocus" LostFocus="NumStageRot_LostFocus" KeyDown="NumStageRot_KeyDown" Visibility="{Binding StageRotationVisibility}" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="5" Grid.Column="1" Text="{loc:Localization AC_StageRotation}" FontSize="11" VerticalAlignment="Center" Margin="3,1,1,1" Visibility="{Binding StageRotationVisibility}"/>
<telerik:RadNumericUpDown Grid.Row="5" Grid.Column="0" x:Name="NumStageRot" Value="{Binding StageRotationAngle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumStageRot_GotFocus" LostFocus="NumStageRot_LostFocus" KeyDown="NumStageRot_KeyDown" Visibility="{Binding StageRotationVisibility}" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="6" Grid.Column="0" Text="{loc:Localization AC_FixtureRotation}" FontSize="11" VerticalAlignment="Center" Margin="0,1,4,1" Visibility="{Binding FixtureRotationVisibility}"/>
<telerik:RadNumericUpDown Grid.Row="6" Grid.Column="1" x:Name="NumFixtureRot" Value="{Binding FixtureRotationAngle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumFixtureRot_GotFocus" LostFocus="NumFixtureRot_LostFocus" KeyDown="NumFixtureRot_KeyDown" Visibility="{Binding FixtureRotationVisibility}" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
<TextBlock Grid.Row="6" Grid.Column="1" Text="{loc:Localization AC_FixtureRotation}" FontSize="11" VerticalAlignment="Center" Margin="3,1,1,1" Visibility="{Binding FixtureRotationVisibility}"/>
<telerik:RadNumericUpDown Grid.Row="6" Grid.Column="0" x:Name="NumFixtureRot" Value="{Binding FixtureRotationAngle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="1" SmallChange="0.1" IsEditable="True" GotFocus="NumFixtureRot_GotFocus" LostFocus="NumFixtureRot_LostFocus" KeyDown="NumFixtureRot_KeyDown" Visibility="{Binding FixtureRotationVisibility}" Margin="0,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
</Grid>
<!-- ===== 右侧:摇杆区域 ===== -->
@@ -69,27 +88,27 @@
<!-- 单轴摇杆(腰圆)-->
<controls:VirtualJoystick x:Name="SingleJoystick"
JoystickMode="SingleAxisY"
Width="40" Height="160"
Width="41" Height="150"
IsEnabled="{Binding IsJoystickEnabled}"
DefaultTopIcon="↑" DefaultBottomIcon="↓"
LeftButtonTopIcon="Src↑" LeftButtonBottomIcon="Src↓"
RightButtonTopIcon="Det↑" RightButtonBottomIcon="Det↓"
LeftButtonTopIcon="SZ↑" LeftButtonBottomIcon="SZ↓"
RightButtonTopIcon="DZ↑" RightButtonBottomIcon="DZ↓"
Margin="2,0,8,0"/>
<!-- 双轴摇杆(圆形)-->
<controls:VirtualJoystick x:Name="DualJoystick"
JoystickMode="DualAxis"
Width="160" Height="160"
Width="150" Height="150"
IsEnabled="{Binding IsJoystickEnabled}"
DefaultTopIcon="↑" DefaultBottomIcon="↓" DefaultLeftIcon="←" DefaultRightIcon="→"
LeftButtonTopIcon="Y+" LeftButtonBottomIcon="Y-" LeftButtonLeftIcon="X-" LeftButtonRightIcon="X+"
RightButtonTopIcon="Rot+" RightButtonBottomIcon="Rot-" RightButtonLeftIcon="Swing-" RightButtonRightIcon="Swing+"
Margin="0,0,2,0"/>
RightButtonTopIcon="R+" RightButtonBottomIcon="R-" RightButtonLeftIcon="DT-" RightButtonRightIcon="DT+"
Margin="0,0,2,0" Cursor="Hand"/>
</StackPanel>
</Grid>
<!-- ========== 下部:安全参数(一行均布)+ 操作按钮(一行均布)========== -->
<StackPanel Grid.Row="1" Margin="0,8,0,0">
<StackPanel Grid.Row="2" Margin="6">
<!-- 安全参数一行(均布)-->
<Grid Margin="0,0,0,6">
@@ -147,24 +166,7 @@
Height="24" MinWidth="80" Padding="8,0" FontSize="11"
telerik:StyleManager.Theme="Crystal"/>
</Grid>
<!-- 错误信息 -->
<TextBlock Text="{Binding ErrorMessage}" FontSize="10" Foreground="#FFE53935"
TextWrapping="Wrap" Margin="0,4,0,0">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ErrorMessage}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding ErrorMessage}" Value="">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</Grid>
</UserControl>
+13 -4
View File
@@ -1,4 +1,4 @@
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
@@ -19,7 +19,7 @@ namespace XP.Hardware.RaySource.Resources {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@@ -133,7 +133,7 @@ namespace XP.Hardware.RaySource.Resources {
}
/// <summary>
/// 查找类似 射线源配置 的本地化字符串。
/// 查找类似 射线源高级选项 的本地化字符串。
/// </summary>
internal static string RaySource_ConfigWindowTitle {
get {
@@ -604,7 +604,7 @@ namespace XP.Hardware.RaySource.Resources {
/// <summary>
/// 查找类似 射线源
///不可用 的本地化字符串。
///未连接 的本地化字符串。
/// </summary>
internal static string RaySource_StatusUnavailable {
get {
@@ -855,6 +855,15 @@ namespace XP.Hardware.RaySource.Resources {
}
}
/// <summary>
/// 查找类似 射线 的本地化字符串。
/// </summary>
internal static string RaySource_XRay {
get {
return ResourceManager.GetString("RaySource_XRay", resourceCulture);
}
}
/// <summary>
/// 查找类似 关闭 的本地化字符串。
/// </summary>
@@ -1,5 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -179,7 +238,7 @@ Opened</value>
</data>
<data name="RaySource_StatusUnavailable" xml:space="preserve">
<value>X-Ray
Unavailable</value>
Not Connected</value>
</data>
<data name="RaySource_ConnectButton" xml:space="preserve">
<value>Connect Ray Source</value>
@@ -215,7 +274,7 @@ Unavailable</value>
<value>Config</value>
</data>
<data name="RaySource_ConfigWindowTitle" xml:space="preserve">
<value>X-Ray Source Configuration</value>
<value>X-Ray Source Advanced Options</value>
</data>
<data name="RaySource_WarmUpLabel" xml:space="preserve">
<value>Warm-Up:</value>
@@ -244,8 +303,8 @@ Unavailable</value>
<data name="RaySource_InterlockNormal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>X-Ray:</value>
<data name="RaySource_XRay" xml:space="preserve">
<value>X-Ray</value>
</data>
<data name="RaySource_XRayOn" xml:space="preserve">
<value>On</value>
@@ -334,4 +393,7 @@ Unavailable</value>
<data name="RaySource_Operation_Sent" xml:space="preserve">
<value>Operation command sent, waiting for device execution...</value>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>X-Ray:</value>
</data>
</root>
+67 -5
View File
@@ -1,5 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -190,7 +249,7 @@
</data>
<data name="RaySource_StatusUnavailable" xml:space="preserve">
<value>射线源
不可用</value>
未连接</value>
<comment>RaySourceOperateView - 射线源不可用状态文本 | X-Ray unavailable status text</comment>
</data>
<data name="RaySource_ConnectButton" xml:space="preserve">
@@ -238,7 +297,7 @@
<comment>RaySourceOperateView - 配置按钮 | Config button</comment>
</data>
<data name="RaySource_ConfigWindowTitle" xml:space="preserve">
<value>射线源配置</value>
<value>射线源高级选项</value>
<comment>RaySourceConfigWindow - 窗口标题 | Window title</comment>
</data>
<data name="RaySource_WarmUpLabel" xml:space="preserve">
@@ -277,9 +336,8 @@
<value>正常</value>
<comment>RaySourceConfigView - 连锁正常状态 | Interlock normal status</comment>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>射线状态:</value>
<comment>RaySourceConfigView - 射线开启状态标签 | X-ray on status label</comment>
<data name="RaySource_XRay" xml:space="preserve">
<value>射线</value>
</data>
<data name="RaySource_XRayOn" xml:space="preserve">
<value>开启</value>
@@ -383,4 +441,8 @@
<data name="RaySource_Operation_Sent" xml:space="preserve">
<value>操作指令已发送,等待设备执行...</value>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>射线状态:</value>
<comment>RaySourceConfigView - 射线开启状态标签 | X-ray on status label</comment>
</data>
</root>
@@ -1,5 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -179,7 +238,7 @@
</data>
<data name="RaySource_StatusUnavailable" xml:space="preserve">
<value>射线源
不可用</value>
未连接</value>
</data>
<data name="RaySource_ConnectButton" xml:space="preserve">
<value>连接射线源</value>
@@ -215,7 +274,7 @@
<value>配置</value>
</data>
<data name="RaySource_ConfigWindowTitle" xml:space="preserve">
<value>射线源配置</value>
<value>射线源高级选项</value>
</data>
<data name="RaySource_WarmUpLabel" xml:space="preserve">
<value>暖机:</value>
@@ -244,8 +303,8 @@
<data name="RaySource_InterlockNormal" xml:space="preserve">
<value>正常</value>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>射线状态:</value>
<data name="RaySource_XRay" xml:space="preserve">
<value>射线</value>
</data>
<data name="RaySource_XRayOn" xml:space="preserve">
<value>开启</value>
@@ -334,4 +393,7 @@
<data name="RaySource_Operation_Sent" xml:space="preserve">
<value>操作指令已发送,等待设备执行...</value>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>射线状态:</value>
</data>
</root>
@@ -1,5 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -179,7 +238,7 @@
</data>
<data name="RaySource_StatusUnavailable" xml:space="preserve">
<value>射線源
不可用</value>
未連線</value>
</data>
<data name="RaySource_ConnectButton" xml:space="preserve">
<value>連接射線源</value>
@@ -215,7 +274,7 @@
<value>配置</value>
</data>
<data name="RaySource_ConfigWindowTitle" xml:space="preserve">
<value>射線源配置</value>
<value>射線源高級選項</value>
</data>
<data name="RaySource_WarmUpLabel" xml:space="preserve">
<value>暖機:</value>
@@ -244,8 +303,8 @@
<data name="RaySource_InterlockNormal" xml:space="preserve">
<value>正常</value>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>射線狀態:</value>
<data name="RaySource_XRay" xml:space="preserve">
<value>射線</value>
</data>
<data name="RaySource_XRayOn" xml:space="preserve">
<value>開啟</value>
@@ -334,4 +393,7 @@
<data name="RaySource_Operation_Sent" xml:space="preserve">
<value>操作指令已發送,等待設備執行...</value>
</data>
<data name="RaySource_XRayOnLabel" xml:space="preserve">
<value>射線狀態:</value>
</data>
</root>
@@ -9,7 +9,7 @@
xmlns:prism="http://prismlibrary.com/"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="XP.Hardware.RaySource.Views.RaySourceOperateView"
mc:Ignorable="d" d:DesignWidth="350"
prism:ViewModelLocator.AutoWireViewModel="True" Height="249" Background="White" >
prism:ViewModelLocator.AutoWireViewModel="True" Height="245" Background="White" >
<UserControl.Resources>
<!-- 转换器 | Converters -->
<converters:RaySourceStatusToColorConverter x:Key="StatusToColorConverter"/>
@@ -61,26 +61,44 @@
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" MinHeight="70" />
<RowDefinition Height="Auto" MinHeight="70" />
</Grid.RowDefinitions>
<!-- 标题栏 -->
<Grid Grid.Row="0">
<Border
Grid.Row="0"
Background="#F0F0F0"
BorderBrush="#DDDDDD"
BorderThickness="0,0,0,1">
<TextBlock
Margin="8,4"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontWeight="SemiBold"
Foreground="#333333"
Text="{loc:Localization RaySource_XRay}" />
</Border>
</Grid>
<!-- 1. 状态区:腰圆指示器 + 按钮 | Status Area: Capsule Indicator + Buttons -->
<Grid Grid.Row="0" Margin="5,5,5,10">
<Grid Grid.Row="1" Margin="3,10,3,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 腰圆状态指示器 | Capsule Status Indicator -->
<Grid Grid.Column="0" Width="200" Height="80" Margin="20 0 0 5">
<Grid Grid.Column="0" Width="190" Height="70" Margin="20 0 0 5">
<Border x:Name="StatusIndicator"
Width="200" Height="80"
Width="190" Height="70"
Background="{Binding RaySourceStatus, Converter={StaticResource StatusToColorConverter}}"
BorderBrush="{Binding RaySourceStatus, Converter={StaticResource StatusToBorderColorConverter}}"
BorderThickness="2"
CornerRadius="40">
CornerRadius="35">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
@@ -98,7 +116,7 @@
</Border.Style>
</Border>
<TextBlock Text="{Binding StatusText}"
Foreground="White" FontSize="18" FontWeight="Bold"
Foreground="White" FontSize="16" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center"
TextAlignment="Center" LineHeight="20"/>
<!-- 连锁状态图标(腰圆右侧圆弧区域)| Interlock status icon (right arc area of capsule) -->
@@ -126,10 +144,10 @@
<!-- 按钮区 | Button Area -->
<StackPanel Grid.Column="1" Orientation="Vertical"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="20 0 20 0">
Margin="15 0 15 0">
<telerik:RadButton Content="{loc:Localization RaySource_TurnOnButton}"
Command="{Binding TurnOnCommand}"
Margin="0 0 0 8" Height="35" HorizontalAlignment="Stretch"
Margin="0 0 0 7" Height="30" HorizontalAlignment="Stretch"
telerik:StyleManager.Theme="Crystal">
<telerik:RadButton.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
@@ -140,7 +158,7 @@
</telerik:RadButton>
<telerik:RadButton Content="{loc:Localization RaySource_TurnOffButton}"
Command="{Binding TurnOffCommand}"
Margin="0 0 0 0" Height="35" HorizontalAlignment="Stretch"
Margin="0 0 0 0" Height="30" HorizontalAlignment="Stretch"
telerik:StyleManager.Theme="Crystal">
<telerik:RadButton.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
@@ -153,7 +171,7 @@
</Grid>
<!-- 2. 电压区 | Voltage Area -->
<Grid Grid.Row="1" Margin="20,0,20,0">
<Grid Grid.Row="2" Margin="15,0,15,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
@@ -167,7 +185,7 @@
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{loc:Localization RaySource_VoltageLabel}"
FontSize="14" FontWeight="Bold" VerticalAlignment="Center"/>
FontSize="13" FontWeight="Bold" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="{Binding VoltageActualText}"
FontSize="10" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Grid>
@@ -206,15 +224,15 @@
</Grid>
<!-- 按钮行:配置 | Button Row: Config -->
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0">
<telerik:RadButton Content="{loc:Localization RaySource_ConfigButton}"
<telerik:RadButton Content="{loc:Localization RaySource_AdvanceButton}"
Command="{Binding ConfigCommand}"
Width="70"
telerik:StyleManager.Theme="Crystal" FontSize="10"/>
telerik:StyleManager.Theme="Crystal" FontSize="10" Visibility="Collapsed"/>
</StackPanel>
</Grid>
<!-- 3. 电流区 | Current Area -->
<Grid Grid.Row="1" Margin="20,75,20,0" Grid.RowSpan="2">
<Grid Grid.Row="3" Margin="15,-10,15,0" Grid.RowSpan="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
@@ -228,7 +246,7 @@
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{loc:Localization RaySource_CurrentLabel}"
FontSize="14" FontWeight="Bold" VerticalAlignment="Center"/>
FontSize="13" FontWeight="Bold" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="{Binding CurrentActualText}"
FontSize="10" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Grid>
@@ -269,10 +287,10 @@
<!-- 按钮行:高级 | Button Row: Advance -->
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0">
<telerik:RadButton Content="{loc:Localization RaySource_AdvanceButton}"
<telerik:RadButton Content="{loc:Localization RaySource_ConfigButton}"
Command="{Binding SettingsCommand}"
Width="70"
telerik:StyleManager.Theme="Crystal" FontSize="10"/>
telerik:StyleManager.Theme="Crystal" FontSize="10" Visibility="Collapsed"/>
</StackPanel>
</Grid>
</Grid>