| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <UserControl x:Class="ivf_tl_Operate.CustomUserControls.SoftKeyboard"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:local="clr-namespace:ivf_tl_Operate.CustomUserControls"
- mc:Ignorable="d"
- d:DesignWidth="760" d:DesignHeight="560">
- <!--
- M4-04-1 · 自绘内置软键盘(数字键盘 + 密码/全键盘)
- ====================================================================
- 取代 osk.exe 系统软键盘(需求 11)。两种模式由 KeyboardMode 切换:
- Number : 0-9 / 退格 / 清除 / 确定 —— 数字/参数输入(M4-04-5)。
- Password : 全键盘(字母+数字+常用符号)+ 退格/清除/Shift/确定 —— 登录账号/调试密码(M4-04-4)。
- 所有按键经统一事件路由到后台,后台仅发 KeyInput / RequestClose 事件,
- 由宿主(SoftKeyboardHost)写回目标 TextBox/PasswordBox —— 键盘本身不直接依赖任何页面。
- 按键尺寸 MinHeight/MinWidth 引用全局 TouchMinSize(=48)(M4-01-4),触控友好;
- 布局全用 Grid/UniformGrid 星号,不写死像素,随顶层 Viewbox(Uniform) 等比缩放(M4-01-1)。
- -->
- <UserControl.Resources>
- <!--
- 键盘按键隐式样式:统一触控基准、字号、间距与按下反馈,作用域仅本控件内的标准 Button
- (动态注入的全键盘按键同样命中)。MinHeight/MinWidth 引用全局 TouchMinSize(=48)(M4-01-4)。
- 标题栏「×」按显式 Width/Height 自带尺寸,本样式只补字号/反馈,不破坏其布局。
- -->
- <Style TargetType="{x:Type Button}">
- <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
- <Setter Property="MinWidth" Value="{StaticResource TouchMinSize}"/>
- <Setter Property="Margin" Value="4"/>
- <Setter Property="FontSize" Value="32"/>
- <Setter Property="FontWeight" Value="Medium"/>
- <Setter Property="Stylus.IsPressAndHoldEnabled" Value="False"/>
- <Style.Triggers>
- <Trigger Property="IsPressed" Value="True">
- <Setter Property="Opacity" Value="0.75"/>
- </Trigger>
- </Style.Triggers>
- </Style>
- </UserControl.Resources>
- <Border Background="#FFF7F8FA" BorderBrush="#FFB0B4B9" BorderThickness="2" CornerRadius="16" Padding="16">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <!-- 标题栏:当前输入回显(密码模式按掩码显示) + 关闭 -->
- <Grid Grid.Row="0" Margin="4 0 4 12">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="*"/>
- <ColumnDefinition Width="Auto"/>
- </Grid.ColumnDefinitions>
- <Border Grid.Column="0" Background="White" BorderBrush="#FFD0D4D9" BorderThickness="1" CornerRadius="8" MinHeight="56">
- <TextBlock x:Name="_preview" Text="" FontSize="32" Foreground="#FF333333"
- VerticalAlignment="Center" Margin="16 0" TextTrimming="CharacterEllipsis"/>
- </Border>
- <Button Grid.Column="1" Content="×" FontSize="40" Width="56" Height="56" Margin="12 0 0 0"
- Background="#FFB0B4B9" Foreground="White" BorderThickness="0"
- Click="Close_Click"/>
- </Grid>
- <!-- ===== 数字键盘(KeyboardMode=Number,默认显示) ===== -->
- <!-- 4 行 × 4 列:左 3 列为 0-9,右 1 列为 退格/清除/确定 -->
- <Grid x:Name="_numberPad" Grid.Row="1">
- <Grid.RowDefinitions>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="*"/>
- <ColumnDefinition Width="*"/>
- <ColumnDefinition Width="*"/>
- <ColumnDefinition Width="*"/>
- </Grid.ColumnDefinitions>
- <Button Grid.Row="0" Grid.Column="0" Content="1" Tag="1" Click="Key_Click"/>
- <Button Grid.Row="0" Grid.Column="1" Content="2" Tag="2" Click="Key_Click"/>
- <Button Grid.Row="0" Grid.Column="2" Content="3" Tag="3" Click="Key_Click"/>
- <Button Grid.Row="0" Grid.Column="3" Content="⌫" Background="#FFD0B070" Foreground="White" Click="Back_Click"/>
- <Button Grid.Row="1" Grid.Column="0" Content="4" Tag="4" Click="Key_Click"/>
- <Button Grid.Row="1" Grid.Column="1" Content="5" Tag="5" Click="Key_Click"/>
- <Button Grid.Row="1" Grid.Column="2" Content="6" Tag="6" Click="Key_Click"/>
- <Button Grid.Row="1" Grid.Column="3" Content="清除" Background="#FFE0A0A0" Foreground="White" Click="Clear_Click"/>
- <Button Grid.Row="2" Grid.Column="0" Content="7" Tag="7" Click="Key_Click"/>
- <Button Grid.Row="2" Grid.Column="1" Content="8" Tag="8" Click="Key_Click"/>
- <Button Grid.Row="2" Grid.Column="2" Content="9" Tag="9" Click="Key_Click"/>
- <!-- 确定:占数字键盘右列下两行 -->
- <Button Grid.Row="2" Grid.RowSpan="2" Grid.Column="3" Content="确定" Background="#FF4D75AC" Foreground="White" Click="Enter_Click"/>
- <Button Grid.Row="3" Grid.Column="0" Content="." Tag="." Click="Key_Click"/>
- <Button Grid.Row="3" Grid.Column="1" Content="0" Tag="0" Click="Key_Click"/>
- <Button Grid.Row="3" Grid.Column="2" Content="-" Tag="-" Click="Key_Click"/>
- </Grid>
- <!-- ===== 全键盘/密码键盘(KeyboardMode=Password 时显示) ===== -->
- <Grid x:Name="_fullPad" Grid.Row="1" Visibility="Collapsed">
- <Grid.RowDefinitions>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <!-- 第1行:数字 1234567890(运行时注入按键) -->
- <UniformGrid x:Name="_rowDigits" Grid.Row="0" Rows="1" Columns="10"/>
- <!-- 第2行:qwertyuiop -->
- <UniformGrid x:Name="_rowQ" Grid.Row="1" Rows="1" Columns="10"/>
- <!-- 第3行:asdfghjkl -->
- <UniformGrid x:Name="_rowA" Grid.Row="2" Rows="1" Columns="9"/>
- <!-- 第4行:Shift + zxcvbnm + 退格 -->
- <Grid Grid.Row="3">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="1.5*"/>
- <ColumnDefinition Width="7*"/>
- <ColumnDefinition Width="1.5*"/>
- </Grid.ColumnDefinitions>
- <Button Grid.Column="0" x:Name="_shiftBtn" Content="⇧" Background="#FFB0B4B9" Foreground="White" Click="Shift_Click"/>
- <UniformGrid x:Name="_rowZ" Grid.Column="1" Rows="1" Columns="7"/>
- <Button Grid.Column="2" Content="⌫" Background="#FFD0B070" Foreground="White" Click="Back_Click"/>
- </Grid>
- <!-- 第5行:清除 + 空格 + 确定 -->
- <Grid Grid.Row="4">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="2*"/>
- <ColumnDefinition Width="6*"/>
- <ColumnDefinition Width="2*"/>
- </Grid.ColumnDefinitions>
- <Button Grid.Column="0" Content="清除" Background="#FFE0A0A0" Foreground="White" Click="Clear_Click"/>
- <Button Grid.Column="1" Content="空格" Tag=" " Click="Key_Click"/>
- <Button Grid.Column="2" Content="确定" Background="#FF4D75AC" Foreground="White" Click="Enter_Click"/>
- </Grid>
- </Grid>
- </Grid>
- </Border>
- </UserControl>
|