Files
XplorePlane/XP.Hardware.MotionControl/Views/AxisControlView.xaml
T

254 lines
18 KiB
XML

<UserControl x:Class="XP.Hardware.MotionControl.Views.AxisControlView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:loc="clr-namespace:XP.Common.Localization.Extensions;assembly=XP.Common"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:prism="http://prismlibrary.com/"
xmlns:controls="clr-namespace:XP.Common.Controls.Joystick;assembly=XP.Common"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
MinWidth="350"
HorizontalAlignment="Stretch" Background="White">
<Grid>
<Grid.RowDefinitions>
<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="Auto"/>
</Grid.ColumnDefinitions>
<!-- ===== 左侧:轴位置输入框 ===== -->
<Grid Grid.Column="0" Margin="0,0,4,0" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{loc:Localization AC_StageX}" FontSize="11" VerticalAlignment="Center" HorizontalAlignment="Right" TextAlignment="Right" Margin="3,1,1,1"/>
<TextBlock Grid.Row="0" Grid.Column="2" Text="{loc:Localization AC_LengthUnit}" FontSize="11" VerticalAlignment="Center" Margin="1,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="0" Grid.Column="1" x:Name="NumStageX" Value="{Binding StageXPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="3" SmallChange="0.1" IsEditable="True" GotFocus="NumStageX_GotFocus" LostFocus="NumStageX_LostFocus" KeyDown="NumStageX_KeyDown" Margin="4,1,2,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" HorizontalAlignment="Right" TextAlignment="Right" Margin="3,1,1,1"/>
<TextBlock Grid.Row="1" Grid.Column="2" Text="{loc:Localization AC_LengthUnit}" FontSize="11" VerticalAlignment="Center" Margin="1,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="1" Grid.Column="1" x:Name="NumStageY" Value="{Binding StageYPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="3" SmallChange="0.1" IsEditable="True" GotFocus="NumStageY_GotFocus" LostFocus="NumStageY_LostFocus" KeyDown="NumStageY_KeyDown" Margin="4,1,2,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" HorizontalAlignment="Right" TextAlignment="Right" Margin="3,1,1,1"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="{loc:Localization AC_LengthUnit}" FontSize="11" VerticalAlignment="Center" Margin="1,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="2" Grid.Column="1" x:Name="NumSourceZ" Value="{Binding SourceZPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="3" SmallChange="0.1" IsEditable="True" GotFocus="NumSourceZ_GotFocus" LostFocus="NumSourceZ_LostFocus" KeyDown="NumSourceZ_KeyDown" Margin="4,1,2,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" HorizontalAlignment="Right" TextAlignment="Right" Margin="3,1,1,1"/>
<TextBlock Grid.Row="3" Grid.Column="2" Text="{loc:Localization AC_LengthUnit}" FontSize="11" VerticalAlignment="Center" Margin="1,1,1,1"/>
<telerik:RadNumericUpDown Grid.Row="3" Grid.Column="1" x:Name="NumDetectorZ" Value="{Binding DetectorZPosition, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueFormat="Numeric" NumberDecimalDigits="3" SmallChange="0.1" IsEditable="True" GotFocus="NumDetectorZ_GotFocus" LostFocus="NumDetectorZ_LostFocus" KeyDown="NumDetectorZ_KeyDown" Margin="4,1,2,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" HorizontalAlignment="Right" TextAlignment="Right" Margin="3,1,1,1" Visibility="{Binding DetectorSwingVisibility}"/>
<TextBlock Grid.Row="4" Grid.Column="2" Text="{loc:Localization AC_AngleUnit}" FontSize="11" VerticalAlignment="Center" Margin="1,1,1,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="3" SmallChange="0.1" IsEditable="True" GotFocus="NumDetSwing_GotFocus" LostFocus="NumDetSwing_LostFocus" KeyDown="NumDetSwing_KeyDown" Visibility="{Binding DetectorSwingVisibility}" Margin="4,1,2,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" HorizontalAlignment="Right" TextAlignment="Right" Margin="3,1,1,1" Visibility="{Binding StageRotationVisibility}"/>
<TextBlock Grid.Row="5" Grid.Column="2" Text="{loc:Localization AC_AngleUnit}" FontSize="11" VerticalAlignment="Center" Margin="1,1,1,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="3" SmallChange="0.1" IsEditable="True" GotFocus="NumStageRot_GotFocus" LostFocus="NumStageRot_LostFocus" KeyDown="NumStageRot_KeyDown" Visibility="{Binding StageRotationVisibility}" Margin="4,1,2,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" HorizontalAlignment="Right" TextAlignment="Right" Margin="3,1,1,1" Visibility="{Binding FixtureRotationVisibility}"/>
<TextBlock Grid.Row="6" Grid.Column="2" Text="{loc:Localization AC_AngleUnit}" FontSize="11" VerticalAlignment="Center" Margin="1,1,1,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="3" SmallChange="0.1" IsEditable="True" GotFocus="NumFixtureRot_GotFocus" LostFocus="NumFixtureRot_LostFocus" KeyDown="NumFixtureRot_KeyDown" Visibility="{Binding FixtureRotationVisibility}" Margin="4,1,2,1" Height="24" FontSize="11" telerik:StyleManager.Theme="Crystal"/>
</Grid>
<!-- ===== 右侧:摇杆区域 ===== -->
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"
Margin="4,12,4,12">
<!-- 单轴摇杆(腰圆)-->
<controls:VirtualJoystick x:Name="SingleJoystick"
JoystickMode="SingleAxisY"
Width="41" Height="150"
IsEnabled="{Binding IsJoystickEnabled}"
SwapMouseButtons="{Binding SwapMouseButtons}"
DefaultTopIcon="↑" DefaultBottomIcon="↓"
LeftButtonTopIcon="SZ↑" LeftButtonBottomIcon="SZ↓"
RightButtonTopIcon="DZ↑" RightButtonBottomIcon="DZ↓"
Margin="2,0,8,0"/>
<!-- 双轴摇杆(圆形)-->
<controls:VirtualJoystick x:Name="DualJoystick"
JoystickMode="DualAxis"
Width="150" Height="150"
IsEnabled="{Binding IsJoystickEnabled}"
SwapMouseButtons="{Binding SwapMouseButtons}"
DefaultTopIcon="↑" DefaultBottomIcon="↓" DefaultLeftIcon="←" DefaultRightIcon="→"
LeftButtonTopIcon="Y+" LeftButtonBottomIcon="Y-" LeftButtonLeftIcon="X-" LeftButtonRightIcon="X+"
RightButtonTopIcon="R+" RightButtonBottomIcon="R-" RightButtonLeftIcon="DT-" RightButtonRightIcon="DT+"
Margin="0,0,2,0" Cursor="Hand"/>
</StackPanel>
</Grid>
<!-- ========== 下部:操作按钮(一行均布)========== -->
<StackPanel Grid.Row="2" Margin="6,0,6,6">
<!-- 操作按钮一行(均布)-->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- 虚拟摇杆使能开关 -->
<telerik:RadButton Grid.Column="1" Width="38" Height="26" Margin="0,0,8,0"
Command="{Binding ToggleEnableCommand}"
ToolTip="{loc:Localization AC_Enable}"
telerik:StyleManager.Theme="Crystal">
<telerik:RadButton.Style>
<Style TargetType="telerik:RadButton">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/ToggleDisable.png" Width="15" Height="15"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsJoystickEnabled}" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/ToggleEnable.png" Width="15" Height="15"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</telerik:RadButton.Style>
</telerik:RadButton>
<!-- 摇杆左右键功能切换开关 -->
<telerik:RadButton Grid.Column="2" Width="38" Height="26" Margin="0,0,8,0"
Command="{Binding ToggleSwapMouseButtonsCommand}"
ToolTip="{loc:Localization AC_SwapMouseButtons}"
telerik:StyleManager.Theme="Crystal">
<telerik:RadButton.Style>
<Style TargetType="telerik:RadButton">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/SwingDisable.png" Width="20" Height="19"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding SwapMouseButtons}" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/SwingEnable.png" Width="20" Height="19"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</telerik:RadButton.Style>
</telerik:RadButton>
<!-- 射线源探测器Z轴锁定移动 -->
<telerik:RadButton Grid.Column="3" Width="38" Height="26" Margin="0,0,8,0"
Command="{Binding SZDZLockCommand}"
ToolTip="{loc:Localization AC_SZDZLock}"
telerik:StyleManager.Theme="Crystal">
<telerik:RadButton.Style>
<Style TargetType="telerik:RadButton">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/SZDZLockDisable.png" Width="19" Height="19"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding SZDZLock}" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/SZDZLockEnable.png" Width="19" Height="19"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</telerik:RadButton.Style>
</telerik:RadButton>
<!-- 保存当前位置 -->
<telerik:RadButton Grid.Column="4" Width="38" Height="26" Margin="0,0,8,0"
Command="{Binding SavePositionsCommand}"
ToolTip="{loc:Localization AC_Save}"
telerik:StyleManager.Theme="Crystal">
<telerik:RadButton.Style>
<Style TargetType="telerik:RadButton">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/SavePoint.png" Width="14" Height="14"/>
</Setter.Value>
</Setter>
</Style>
</telerik:RadButton.Style>
</telerik:RadButton>
<!-- 恢复前一位置 -->
<telerik:RadButton Grid.Column="5" Width="38" Height="26" Margin="0,0,8,0"
Command="{Binding RestorePositionsCommand}"
ToolTip="{loc:Localization AC_Restore}"
IsEnabled="{Binding HasSavedPositions}"
telerik:StyleManager.Theme="Crystal">
<telerik:RadButton.Style>
<Style TargetType="telerik:RadButton">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/BackPointDisable.png" Width="14" Height="14"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding HasSavedPositions}" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source="pack://application:,,,/XP.Hardware.MotionControl;component/Resources/BackPointEnable.png" Width="14" Height="14"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</telerik:RadButton.Style>
</telerik:RadButton>
</Grid>
</StackPanel>
</Grid>
</UserControl>